如何使用 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 教程部分以获取更多信息。
我有带 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 教程部分以获取更多信息。