JScrollPane ändert die Größe von JPanel, wenn Bildlaufleisten angezeigt werden

8

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%     
dylan202 26.04.2012, 09:55
quelle

3 Antworten

6

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.

    
Russ Hayward 26.04.2012, 11:25
quelle
2

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();

hinzugefügt

ZUSATZLINIE

%Vor%

Hier ist Ihr Code mit der hinzugefügten Zeile:

%Vor%     
nIcE cOw 26.04.2012 13:01
quelle
0

Sie können die Größe des JPanels ändern, indem Sie setPreferredSize aufrufen, wenn das JPanel in der Größe angepasst werden muss.

%Vor%     
ChadNC 26.04.2012 11:38
quelle

Tags und Links