您好我使用BoxLayout
将JPanel
堆叠在一起(BoxLayout.Y_AXIS
),例如,如果我的父JPanel
高度为500像素,我为它添加了两个高度为100像素的子面板。 BoxLayout
将它们拉伸,以便它们共同占据500px空间。有谁知道如何禁用此功能?
答案 0 :(得分:23)
BoxLayout是少数几个遵循组件最小和最大尺寸的布局管理器之一。因此,如果您想阻止面板拉伸,可以使用:
panel.setMaximumSize( panel.getPreferredSize() );
答案 1 :(得分:10)
请改用GridBagLayout。您可以更好地控制UI。
但是如果你想仍然使用BoxLayout,并且不希望它们伸展,你可以使用invisible component fillers检查,如刚性区域,胶水和填充物。
答案 2 :(得分:4)
正如之前的回答所提到的,诀窍是在盒子布局中使用胶水,填充物和刚性区域。然而,与那个响应者不同,我建议坚持使用BoxLayout - 使用Box比使用Grid Bag更容易完成大多数简单的UI;在典型的对话框中,额外的功率并没有给你带来太大的好处。
在旧的习语中,这些是像Box.createHorizontalStrut(int x)和Box.createHorizontalGlue();我的想法是你在第一个和第二个组件之间加一个支柱,然后在第二个组件之后加一个胶水。 (“strut”=现在的“刚性区域”)。
答案 3 :(得分:4)
这似乎完全正常......使用BoxLayout,如你所愿。
this.setLayout(new FlowLayout()); // this being the JFrame
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.setPreferredSize(new Dimension(500, 500));
panel.setBackground(Color.orange);
this.add(panel); // add the parent to the JFrame
JPanel pnlChild1 = new JPanel();
pnlChild1.setBackground(Color.cyan);
pnlChild1.setMaximumSize(new Dimension(200, 100));
JPanel pnlChild2 = new JPanel();
pnlChild2.setBackground(Color.magenta);
pnlChild2.setMaximumSize(new Dimension(200, 100));
panel.add(pnlChild1);
panel.add(pnlChild2);
答案 4 :(得分:3)
您的面板正在拉伸,因为BoxLayout不会将每个面板限制为其首选大小。您需要找到符合组件首选大小的布局,如BorderLayout的NORTH和SOUTH位置。
试试这个:
代码:
JPanel panel1 = new JPanel(new BorderLayout());
panel1.add(component1, BorderLayout.NORTH);
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add(component2, BorderLayout.NORTH);
JPanel boxPanel = new JPanel();
BoxLayout boxLayout = new BoxLayout(boxPanel, BoxLayout.Y_AXIS);
boxPanel.setLayout(boxLayout);
boxPanel.add(panel1);
boxPanel.add(panel2);