当前位置: 首页 > 知识库问答 >
问题:

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

松铭
2023-03-14

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

共有1个答案

丌官淇
2023-03-14

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

BoxLayout尊重组件的最大大小大小。对于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);

现在标签面板将只取它需要的高度,但是宽度会增长以填充框架的宽度,因此标签宽度也会增长。

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

有关详细信息,请阅读布局管理器上的 Swing 教程中的部分。

 类似资料:
  • 问题内容: 嗨,我使用a 来使彼此堆叠(),例如,如果我的父母的身高为500像素,并且我向其添加了两个子面板,两者的高度均为100像素。在绵延他们,让他们一起占据了500px的空间。有谁知道如何禁用此功能? 问题答案: 请改用GridBagLayout。您对UI的控制更多。 但是,如果您仍要使用BoxLayout且不希望它们拉伸,则可以使用不可见的组件填充物(如刚性区域,胶水和填充物)进行签出。

  • 问题内容: 我有一个服务器端组件,该组件使用固定宽度生成流畅的布局“工具栏” ,并在其中生成许多布局。 然后,我需要自定义该布局,以使所有标签自动适应父级宽度。但是子级的数量是可变的,并且父级的宽度未知(它自动适合窗口)。 但是我找不到使它动态的方法(取消注释最后一个标签以查看它如何工作,大声笑)。 我不能更改服务器端源来使固定宽度的HTML gerenate。而且我真的很想仅通过CSS来解决它,

  • 我正在开发一款名为Galaxywar的游戏,我正在尝试制作一个地图选择菜单。我发现了一个问题,当我使用带有在带有的JGroup上,具有指定大小的子组件(JGroup)占据了面板的整个高度(全部一起),而不是指定的高度! 以下是我的代码: 我对此进行了长时间的研究,但到目前为止找不到任何解决方案。

  • 下面的代码将 3 个 JPanel 放在 JFrame 中。我希望蓝色面板的宽度为300(假设封闭框架的宽度大于300)。其他两个面板的宽度应为其余部分。我该怎么做? 我用@camickr建议使用BorderLayout对上面的代码做了一点小小的更新。宽度现在符合要求。感谢@camickr。 我仍然认为BoxLayout应该尊重最小和最大尺寸。考虑到这些因素,它应该将宽度设置为500。

  • 我有一个基于CssLayout的视图,它有一个预定义的最小宽度,但可以扩展以填充整个屏幕。这个视图,我们称之为父视图,在列表视图中有子视图。每个子级都是扩展HorizontalLayout的同一类的实例。 我有几个布局问题。 首先,由于封装垂直布局为每个孩子提供了一定百分比的空间,而不是允许他们根据自己的高度适当地分配空间,因此孩子们彼此重叠。VerticalLayout是必需的,因为当列表大于父

  • 我需要使用父组件中子组件内部的状态值。 组成部分: 这是父组件: