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

时间:2016-03-08 03:41:15

标签: java swing jpanel jlabel 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);

如果你能告诉我,我将不胜感激! 感谢

1 个答案:

答案 0 :(得分:2)

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

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

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

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