BoxLayout拉伸组件以适合父面板
嗨我正在使用BoxLayout
将JPanel
堆叠在彼此之上( BoxLayout.Y_AXIS
),例如,如果我的父JPanel
高度为500像素,我向它添加两个高度为100像素的子面板。 BoxLayout
它们拉伸,以便它们共同占据500px空间。 有谁知道如何禁用此function?
请改用GridBagLayout 。 您可以更好地控制UI。
但是如果你想要使用BoxLayout,并且不希望它们伸展,你可以使用隐形组件填充物检查,例如刚性区域,胶水和填充物。
BoxLayout是少数几个考虑组件最小和最大尺寸的布局管理器之一。 因此,如果您想阻止面板伸展,您可以使用:
panel.setMaximumSize( panel.getPreferredSize() );
您的面板正在拉伸,因为BoxLayout不会将每个面板限制为其首选大小。 您需要找到符合组件首选大小的布局,如BorderLayout的NORTH和SOUTH位置。
尝试这个:
- 使用BorderLayout创建JPanel。 在此JPanel中将您的子组件添加为NORTH。
- 为另一个子组件创建第二个JPanel,将其添加为BorderLayout的NORTH
- 将两个JPanel添加到BoxLayout。
码:
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);
如上所述,诀窍是在盒子布局中使用胶水,填充物和刚性区域。 然而,与那个响应者不同,我建议坚持使用BoxLayout – 使用Box比使用Grid Bag更容易完成大多数简单的UI; 在典型的对话框中,额外的功率并没有给你带来太多的好处。
在旧的习语中,这些是像Box.createHorizontalStrut(int x)和Box.createHorizontalGlue(); 我的想法是你在第一个和第二个组件之间加一个支柱,然后在第二个组件之后加一个胶水。 (“strut”=现在的“刚性区域”)。
这似乎完全正常…使用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);