Java 盒子布局赢得';不要左对齐
我有一个自定义面板(Java 盒子布局赢得';不要左对齐,java,swing,layout-manager,gridbaglayout,boxlayout,Java,Swing,Layout Manager,Gridbaglayout,Boxlayout,我有一个自定义面板(APanel)。两个问题: 我需要标签(“顶部标签”)和子面板(bPanel)在面板左侧对齐 BPANT/在左侧对齐,但顶部标签位于中间。我怎么修理 如何设置标签和bPanel,以便在展开整个框架时,它们的垂直大小不会改变,并且彼此之间保持相同的垂直距离?换句话说,我如何防止以下情况发生? 下面是APanel和bPanel的代码。如有必要,APanel将作为JFrame中的中心组件加载到BorderLayout(此处不包括框架代码) 我需要标签(“顶部标签”)和子面板(bPa
APanel
)。两个问题:
bPanel
)在面板左侧对齐<代码> BPANT/<代码>在左侧对齐,但顶部标签位于中间。我怎么修理bPanel
,以便在展开整个框架时,它们的垂直大小不会改变,并且彼此之间保持相同的垂直距离?换句话说,我如何防止以下情况发生?APanel
和bPanel
的代码。如有必要,APanel
将作为JFrame
中的中心组件加载到BorderLayout
(此处不包括框架代码)
我需要标签(“顶部标签”)和子面板(bPanel)在面板左侧对齐
控制与容器对齐的错误方法。阅读jlabelapi。如果标签的大小大于文本的首选大小,则该方法用于在JLabel的边界内对齐文本
this.setAlignmentX(LEFT_ALIGNMENT);
关闭,但这不是必需的,因为if在其父容器中引用了整个面板的对齐方式
相反,您需要使用垂直BoxLayout
设置要添加到此面板的所有组件的“对齐方式”。每个组件可能具有不同的默认值。有些默认为“左”,有些默认为“中”
有关更多信息,请阅读上的Swing教程部分
如何设置标签和bPanel,以便在展开整个框架时,它们的垂直大小不会改变,并且彼此之间保持相同的垂直距离
当额外空间可用时,BoxLayout将允许组件增长(最大尺寸)。对于JLabel,最大大小与其首选大小相同。对于JPanel,最大大小是Integer.MAX\u value的值
因此,您可以使用如下代码覆盖面板的getMaximumSize()
方法:
@Override
public Dimension getMaximumSize()
{
Dimension preferred = getPreferredSize();
Dimension maximum = super.getMaximumSize();
maximum.height = preferred.height;
return maximum;
}
或者,另一个选项是将面板包裹在另一个与高度相关的面板中。比如说
JPanel wrapper = new JPanel( new BorderLayout() );
wrapper.add(bPanel, BorderLayout.PAGE_START);
add(wrapper);
//add(bPanel);
“(此处不包括帧代码)。”要更快获得更好的帮助,请添加或。谢谢!这两个问题的解决方案都奏效了。我要向任何面临问题1的人提供的另一个注意事项是,问题不是jLabel的对齐,而是bPanel的对齐。我必须通过添加bPanel.setAlignmentX(Components.left_ALIGNMENT)将bPanel从中心更改为左对齐。仅仅更改jLabel的对齐方式并不能解决问题(事实上,默认情况下它是左对齐的)。正如camickr提供的文章所述,两个组件之间的不匹配对齐导致了奇怪的结果。
@Override
public Dimension getMaximumSize()
{
Dimension preferred = getPreferredSize();
Dimension maximum = super.getMaximumSize();
maximum.height = preferred.height;
return maximum;
}
JPanel wrapper = new JPanel( new BorderLayout() );
wrapper.add(bPanel, BorderLayout.PAGE_START);
add(wrapper);
//add(bPanel);