嗨,我正在使用BoxLayout
将JPanel
在其上方堆叠(BoxLayout.Y_AXIS
),例如,如果我的父JPanel
高度为500像素,并且我添加两个子面板,每个高度为100像素,则BoxLayout
会拉伸它们,使其共占用500px的空间。有人知道如何禁用此功能吗?
嗨,我正在使用BoxLayout
将JPanel
在其上方堆叠(BoxLayout.Y_AXIS
),例如,如果我的父JPanel
高度为500像素,并且我添加两个子面板,每个高度为100像素,则BoxLayout
会拉伸它们,使其共占用500px的空间。有人知道如何禁用此功能吗?
BoxLayout是少数几个布局管理器之一,它尊重组件的最小和最大尺寸。因此,如果您想要防止面板拉伸,可以使用以下代码:
panel.setMaximumSize( panel.getPreferredSize() );
getMaximumSize()
方法,以简单地从getPreferredSize()
方法返回值。这样,最大尺寸将在首选尺寸动态更改的情况下动态计算。 - camickr使用GridBagLayout代替。这样你可以更好地控制用户界面。
但如果你仍想使用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);
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);