Swing JLabel水平定位未按预期工作

Swing JLabel水平定位未按预期工作,swing,jlabel,layout-manager,Swing,Jlabel,Layout Manager,下面是一个JFrame,我打算用一系列具有以下属性的JLabel来展示它: 垂直堆放 水平居中 绿色边界 白色背景 蓝色文本 但我得到的却是: 垂直堆叠的蓝色文本、绿色边框可以正常工作,但白色背景和水平居中则不行。我还以为标签会横跨JPanel的整个宽度 我做错了什么 编辑:缺少关于背景色的信息。所以我剩下的问题是关于BoxLayout和组件在另一个轴上的定位 将以下行添加到addLabel(): 有关完整示例,请参见 稍后添加: 我找到了简单的解决方案: label.setMaxim

下面是一个JFrame,我打算用一系列具有以下属性的JLabel来展示它:

  • 垂直堆放
  • 水平居中
  • 绿色边界
  • 白色背景
  • 蓝色文本
但我得到的却是:

垂直堆叠的蓝色文本、绿色边框可以正常工作,但白色背景和水平居中则不行。我还以为标签会横跨JPanel的整个宽度

我做错了什么


编辑:缺少关于背景色的信息。所以我剩下的问题是关于BoxLayout和组件在另一个轴上的定位



将以下行添加到
addLabel()

有关完整示例,请参见

稍后添加: 我找到了简单的解决方案:

label.setMaximumSize(new Dimension(200, 200));
//label.setAlignmentX(CENTER_ALIGNMENT);//aligns label itself
label.setHorizontalAlignment(SwingConstants.CENTER);//aligns text inside the label

这同样有效,但您的BorderLayout解决方案似乎更合适。

好的,这让我对中了。。。谢谢有没有办法使JLabel扩展到面板的全宽?或者这是不是其中一件事情没有这样做?@Jason S对于扩展,您可能选择了错误的布局。进行扩展似乎是布局任务,而BoxLayout无法扩展单个组件。我使用BorderLayout和BorderLayout.CENTER布局将每个JLabel包装在一个JPanel中。这似乎有效。我使用的是miglayout,其中没有任何东西可以用于像这样简单的东西。谢谢,节省了我一些时间+1
label.setAlignmentX(CENTER_ALIGNMENT);
label.setMaximumSize(new Dimension(200, 200));
//label.setAlignmentX(CENTER_ALIGNMENT);//aligns label itself
label.setHorizontalAlignment(SwingConstants.CENTER);//aligns text inside the label