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

How to make a component fit parents width using BoxLayout?

我有带 BoxLayout Y 轴的 JPanel,想向该面板添加多个 JLabel。标签应该适合面板的宽度,但只使用它们需要的高度。你们谁能帮帮我吗?

How to make a component fit parents width using 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 约束,允许每个组件调整大小以填充可用的 space。

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