Geben Sie ein JPanel eine prozentuale Breite
Was ist der einfachste Weg, um eine JPanel
, die einen festen Prozentsatz des übergeordneten Containers der Breite?
Seine Breite sollte aktualisiert, wenn das des übergeordneten Containers ändert.
Versuchte ich mit Box.createHorizontalStrut()
, aber das wird nicht aktualisiert, wenn die Breite des JPanel
's übergeordneten container ändert.
- einfach durch die Verwendung von GridBagLayout und benutzerdefinierte MigLayout, TableLayout
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie wollen, ist eine GridBagLayout. (Wie zu benutzen?)
Mit einem GridbagLayout ermöglicht Ihnen zu definieren, GridBagConstraints für jede einzelne Komponente, die Sie hinzufügen.
Diese Einschränkungen sind
weightx
die genau das tut, was es auf dem zinn sagt. Dies ist ein relativer Wert, berechnet über alle Komponenten, die "grid-row", ähnlich der Verteilung der Teile.Bewusst sein, dass die weightx beginnt erst ins Spiel kommen, wenn die bevorzugte Größe der Komponenten überschritten wird. Beachten Sie, dass dieser Mai führen zu interessanten Fehlern bei der Festlegung der minimumSize(), siehe auch dies, SO die Antwort.
Sowieso: Sie können den Wert abrufen, müssen Sie für weightx durch die Angabe Anteil über die Komponenten in der aktuellen Zeile, oder ein beliebiges Vielfaches davon.
Dies bedeutet, dass für eine Komponente, die nehmen 50% der verfügbar übergeordneten container Breite, verwenden Sie
weightx = 0.5
. stellen Sie sicher, dass die Zeile die Werte weightx hinzufügen von bis zu1.0
Könnten Sie die Relative Layout. Dieses layout wurde für diesen Zweck entworfen, da keines der layouts aus dem JDK direkt unterstützen (und leicht).
Als ein einfaches Beispiel könnten Sie haben 3 Platten bei 25%, 25% und 50% der Breite:
Andere Möglichkeit ist die Verwendung eines
SpringLayout
: