Mam mały problem podczas korzystania z JScrollPane
w mojej aplikacji Java.Zmiana rozmiaru JScrollPane zawierającego JPanel przy wyświetlaniu pasków przewijania
Mam JScrollPane
zawierający JPanel
. Ta JPanel
jest dynamicznie aktualizowana za pomocą przycisków (uporządkowanych pionowo), które mogą mieć dowolną szerokość. Model JPanel
automatycznie dostosowuje swoją szerokość do największego komponentu JButton
w środku.
Teraz, gdy pojawi się pionowy pasek przewijania, zabiera trochę miejsca po prawej stronie mojego JPanel
, co powoduje, że największe przyciski nie są wyświetlane w całości. Nie chcę używać poziomego paska przewijania, oprócz wyświetlania całego przycisku.
Czy istnieje sposób zmiany rozmiaru mojej JPanel
po wyświetleniu paska przewijania, więc ładnie się wyświetla obok przycisków? Czy istnieje inny sposób wyświetlania paska przewijania obok mojego JPanel
?
Z góry dziękuję!
EDYTOWANIE: Oto demonstracja mojego problemu. Kiedy zmieniasz rozmiar okna na mniejszą wysokość, mała część przycisków po prawej stronie zostaje zasłonięta.
import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.GridLayout;
/**
* @author Dylan Kiss
*/
public class Demo {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
JFrame myFrame = new JFrame("Demo");
JPanel sideBar = new JPanel();
JPanel centerPanel = new JPanel();
centerPanel.add(new JLabel("This is the center panel."));
JPanel buttonContainer = new JPanel();
JButton myButton = null;
for (int i = 0; i < 20; i++) {
buttonContainer.setLayout(new GridLayout(20, 1, 0, 0));
myButton = new JButton("This is my button nr. " + i);
buttonContainer.add(myButton);
}
sideBar.setLayout(new BorderLayout(0, 0));
JScrollPane scrollPane = new JScrollPane(buttonContainer);
sideBar.add(scrollPane);
myFrame.getContentPane().add(sideBar, BorderLayout.WEST);
myFrame.getContentPane().add(centerPanel, BorderLayout.CENTER);
myFrame.setLocationByPlatform(true);
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.pack();
myFrame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
można udostępnić SSCCE? – StanislavL
Jest to część dużego projektu. Postaram się przedstawić krótką wersję demonstracyjną problemu. – dylan202
@StanislavL dla nowych użytkowników, przypuszczam, że lepiej jest powiązać to, co [SSCCE] (http://sscce.org/) jest! :) – COD3BOY