我有带有BoxLayout Y轴的JPanel,并希望在此面板中添加多个JLabel。标签应适合面板宽度,但仅使用它们所需的高度。你们其中一个可以帮助我吗?
答案 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教程中的部分以获取更多信息。