Konfrontiert mit dem Problem der Verwendung von BoxLayout
In meinem Beispiel versuche ich, die Höhe des Textfelds zu verringern und die Breite der Schaltflächen zu ändern (wie in der grünen Markierung im Bild gezeigt). Ich kenne die Techniken setPreferedSize () und setMaximumSize (), aber es hat nicht so funktioniert, wie es sollte. Die Zeile add (Box.createHorizontalGlue ()) hat ebenfalls nicht geholfen.
Danke für jede Idee
%Vor%
Zunächst müssen Sie feststellen, dass die Position und Größe der Komponenten in Java Swing vom Layout-Manager (wenn der Layout-Manager festgelegt ist) und nicht von der Komponente selbst abhängt. Die Komponente fordert den Manager nach Größe an.
Für diesen Fall würde ich ein anderes Layout verwenden - die Kombination von GridLayout und BorderLayout ist ausreichend und sehr einfach und unkompliziert. Aber wenn Sie BoxLayout verwenden möchten, dann ...
Dokumentation sagt:
BoxLayout passt auf zu den Mindest-, Vorzugs- und Maximalgrößen einer Komponente. Während Sie das Layout optimieren, müssen Sie diese möglicherweise anpassen Größen. ... Zum Beispiel ist die maximale Größe einer Schaltfläche in der Regel die wie seine bevorzugte Größe. Wenn Sie möchten, dass der Button breiter wird Wenn zusätzlicher Speicherplatz verfügbar ist, müssen Sie dessen ändern maximale Größe.
Dann legen Sie die maximale Größe der Komponenten fest: c.setMaximumSize(new Dimension(Integer.MAX_VALUE, c.getMinimumSize().height));
( c
bedeutet button
, label
und textField
in Ihrem Beispiel)
Bearbeiten 1:
Hier arbeitet Quellcode:
%Vor%
Bearbeiten Sie 2:
Wenn Sie Schaltfläche 4 am unteren Rand der rechten Spalte angeordnet haben, fügen Sie diese Zeile add(Box.createVerticalGlue());
zwischen add(textField);
und button = new JButton("Button 4");
hinzu.
Als schnelle Abhilfe können Sie verschachtelte Layouts verwenden, indem Sie auf der rechten Seite ein JPanel
mit BorderLayout
erstellen, ein JPanel(say compPanel)
auf das CENTER
und ein JPanel(say buttonPanel)
auf PAGE_END
location. Benutze nun ein neues JPanel(say panel)
mit GridLayout
und lege alle Komponenten darauf und platziere dieses compPanel
in centerPanel
. Platziere JButton(button4)
in buttonPanel
so wie es ist.
BoxLayout
dagegen respektiert die bevorzugte Größe einer gegebenen JComponent
, die normalerweise auf der Grundlage des Gehalts berechnet wird, den die JComponent
enthält oder explizit gegeben ist, daher tendieren Komponenten nicht dazu, sich in Bezug auf andere gut auszurichten gegebene Komponenten.
Hier ist das Arbeitsbeispiel:
%Vor%AUSGABE:
Tags und Links java swing layout layout-manager boxlayout