如何使已受 BoxLayout 影响的标签居中?

How do I center a label that is already affected by BoxLayout?

所以我想创建一个面板,里面有两个标签和一个按钮,它们通过框布局在 Y_axis 上对齐。

我现在正在尝试获取它,以便文本与面板的中心以及 Y 轴对齐以保持整洁。

这是我现在拥有的代码:

JPanel statPanel = new JPanel();
statPanel.setBorder(BorderFactory.createTitledBorder("Text Statistics"));
statPanel.add((averageLength = new JLabel("The average length of the words: ")));
statPanel.add((totalWords = new JLabel("The total number of words: ")));
//Create button inside statPanel
statPanel.add((stats = new JButton("Update Text Statistics")));
stats.addActionListener(new ButtonListener());
statPanel.setOpaque(false);
statPanel.setLayout(new BoxLayout(statPanel, BoxLayout.Y_AXIS));

如您所见,我已经使用了 BoxLayout 来获得垂直对齐,并且我尝试了以下代码,它们似乎根本没有影响我的情况(而且看起来确实很啰嗦):

averageLength.setHorizontalAlignment(SwingConstants.CENTER);
averageLength.setVerticalAlignment(SwingConstants.CENTER);
totalWords.setHorizontalAlignment(SwingConstants.CENTER);
totalWords.setVerticalAlignment(SwingConstants.CENTER);
stats.setHorizontalAlignment(SwingConstants.CENTER);
stats.setVerticalAlignment(SwingConstants.CENTER);

如果您能给我建议,我们将不胜感激! 谢谢

您不需要设置水平或垂直对齐方式。这些属性与布局管理器(即 BorderLayout)一起使用,布局管理器将组件的大小更改为大于组件的首选大小。然后组件根据其绘制规则对齐文本。

相反,您需要设置 x 对齐方式。在这种情况下,组件尺寸仍然是首选尺寸。但是,布局管理器将组件与容器中可用的 space 对齐。因此,要使组件居中于容器的宽度,您可以使用:

averageLength.setAlignmentX(0.5f);
totalWords.setAlignmentX(0.5f);
stats.setAlignmentX(0.5f);

BoxLayout 不会更改组件的大小,因此它遵守此 属性。