Ich habe ein kleines Problem bei der Verwendung von JScrollPane
in meiner Java-Anwendung.
Ich habe ein JScrollPane
mit einem JPanel
.
Diese JPanel
wird dynamisch mit Schaltflächen (vertikal geordnet) aktualisiert, die eine beliebige Breite haben können.
Die JPanel
passt ihre Breite automatisch an die größte JButton
Komponente im Inneren an.
Wenn nun die vertikale Bildlaufleiste erscheint, wird auf der rechten Seite von JPanel
etwas Platz weggenommen, wodurch die größten Schaltflächen nicht vollständig erscheinen. Ich möchte außerdem keine horizontale Bildlaufleiste verwenden, um die gesamte Schaltfläche anzuzeigen.
Gibt es eine Möglichkeit, meine JPanel
zu skalieren, wenn eine Bildlaufleiste angezeigt wird, sodass sie neben meinen Schaltflächen angezeigt wird? Oder gibt es eine andere Möglichkeit, die Bildlaufleiste neben meinem JPanel
erscheinen zu lassen?
Vielen Dank im Voraus!
BEARBEITEN : Hier ist eine Demo meines Problems. Wenn Sie das Fenster auf eine kleinere Höhe verkleinern, wird ein kleiner Teil der Schaltflächen auf der rechten Seite abgedeckt.
%Vor%Hier ist eine einfache, nicht hübsche Lösung:
%Vor%BEARBEITEN: Ich dachte, das könnte in deinem Fall nicht funktionieren. Hier ist eine bessere Lösung, obwohl es ziemlich viel Vorwand hat:
%Vor%Es implementiert Scrollable, um die volle Kontrolle über das Scrollen zu erhalten, macht einen raffinierten Trick mit der Verfolgung der Höhe des Darstellungsbereichs, um sicherzustellen, dass die Schaltflächen bei verfügbarem Platz erweitert werden und die Breite der vertikalen Bildlaufleiste jederzeit der bevorzugten Breite hinzugefügt wird. Es könnte sich erweitern, wenn die vertikale Bildlaufleiste sichtbar ist, aber trotzdem schlecht aussieht. Benutze es so:
%Vor%Es sieht so aus, als ob diese Problemumgehung wegen eines möglichen Fehlers in javax.swing.ScrollPaneLayout erforderlich ist:
%Vor%Hier wird extentSize auf die bevorzugte Größe des Ansichtsfensters und viewSize auf viewout.getViewSize () gesetzt. Dies scheint nicht korrekt zu sein, AFAIK sollte die Größe der Ansicht innerhalb des Ansichtsfensters immer der bevorzugten Größe entsprechen. Es scheint mir, dass die Ansichtsgröße mit der tatsächlichen Größe des Ansichtsfensters und nicht mit seiner bevorzugten Größe verglichen werden sollte.
Eine einfache Problemumgehung, um Ihre Anforderungen bezüglich
zu erfüllen %Vor%ist die Verwendung von EmptyBorder , dies wird erlaubt Sie erreichen, was Sie fühlen, sollte passieren, wie im Bild unten gezeigt:
Ich habe gerade diese Zeile nach der Zeile JPanel buttonContainer = new JPanel();
ZUSATZLINIE
%Vor%Hier ist Ihr Code mit der hinzugefügten Zeile:
%Vor%Tags und Links java swing jpanel jscrollpane