Verschachtelte layouts FlowLayout innen BoxLayout
Ich habe eine controlPanel
(BoxLayout
):
controlPanel.setLayout(new BoxLayout(controlPanel, BoxLayout.Y_AXIS));
Nun Baue ich zwei FlowLayout
und fügen Sie Sie der contolPanel
panel:
JPanel fromDatePanel = new JPanel(new FlowLayout());
JPanel untilDatePanel = new JPanel(new FlowLayout());
fromDatePanel.add(new JLabel("From - "));
fromDatePanel.add(new JButton("..."));
untilDatePanel.add(new JLabel("Until - "));
untilDatePanel.add(new JButton("..."));
controlPanel.add(fromDatePanel);
controlPanel.add(untilDatePanel);
Ich bin immer dies:
Warum es zu einer Diskrepanz zwischen den layouts? Wenn ich legen Sie eine JButton
zum Beispiel, funktioniert es (Es wird mit Ihnen auch keine Lücke).
Wie kann ich entfernen Sie die Lücke zwischen den beiden FlowLayout
? (So wird es wie die Blaue Lücke)
- Wenn Sie möchten, um die
BoxLayout
und loszuwerden, die Lücke, überschreibengetMaximumSize()
desJPanel
und zurückgetPreferredSize
. Siehe meine Antwort unten. - Danke, das hat geholfen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erzielen Sie eine vertikale layout (vertikal zentriert) mit
GridBagLayout
(und verwenden Sie dieGridBagConstraint
mit einemgridwidth=REMAINDER
):Bezug auf den Unterschied zwischen
JButton
undJPanel
wenn Hinzugefügt, um einBoxLayout
dies ist aufgrund der Unterschiede bei der Umsetzung dergetMaximumSize()
zu berücksichtigen ist, die durch dieBoxLayout
.JButton
gibt die bevorzugte Größe, währendJPanel
zurücknull
interpretiert wird durch dieBoxLayout
als unendliche Dimensionen.Wenn Sie möchten, um Ihr
BoxLayout
könnten Sie überschreibenJPanel.getMaximumSize()
und zurückgetPreferredSize()
:Sehen die Mit Unsichtbaren Komponenten, die als Füller über
Box.createVerticalGlue()
.FlowLayout
s werden direkt unter jedem anderen (ohne Abstand).GridBagLayout
oderGroupLayout
; die letztere ist gesehen hier.Ich verwendet
BorderLayout
- und es funktionierte.Edit-1:
Können Sie hinzufügen, verschachtelten panels in jedem panel.
BoxLayout
da möchte ich hinzufügen, dass mehr als zwei Schaltflächen.