Festlegen der Komponentengröße im Container mit BoxLayout

8

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%

    
Dumas45 23.08.2013, 14:44
quelle

3 Antworten

21

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 ...

  1. 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.

  2. 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.

    
Boris Šuška 23.08.2013, 16:02
quelle
3

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:

    
nIcE cOw 23.08.2013 16:10
quelle
1

Dies sollte nahe kommen, basierend auf Ihrer Zeichnung, müssen Sie nur an dieser Komponente arbeiten unter dem JLabel (mit setPreferredSize ()):

%Vor%     
Fernando 23.08.2013 16:09
quelle