如何使用BoxLayout使组件适合父级宽度?

时间:2017-02-10 20:22:23

标签: java swing layout-manager boxlayout

我有带有BoxLayout Y轴的JPanel,并希望在此面板中添加多个JLabel。标签应适合面板宽度,但仅使用它们所需的高度。你们其中一个可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

  

如何使用BoxLayout使组件适合父级宽度?

BoxLayout尊重组件的maximum size大小。对于JLabel,首选尺寸和最大尺寸相同,因此标签尺寸不会增大。

因此,您可以覆盖每个JLabel的getMaximumSize()方法,以执行以下操作:

return new Dimension(getPreferredSize().width, Integer.MAX_VALUE);

然而,一种更简单的方法是使面板能够满足您的需要。

例如:

JPanel labelPanel = new JPanel( new GridLayout(0, 1) );
labelPanel.add(new JLabel( "one" ) );
labelPanel.add(new JLabel( "two" ) );

JPanel wrapper = new JPanel( new BorderLayout() );
wrapper.add(labelPanel, BorderLayout.PAGE_START);

frame.add(wrapper, BorderLayout.CENTER);

现在labelPanel将只采用它所需的高度,但宽度将增加以填充框架的宽度,因此标签宽度也将增长。

不使用嵌套面板的另一个选择是使用GridBagLayout。它支持fill约束,允许每个组件调整大小以填充可用空间。

阅读Layout Managers上Swing教程中的部分以获取更多信息。