【问题标题】:How do I center a label that is already affected by BoxLayout?如何将已受 BoxLayout 影响的标签居中?
【发布时间】:2016-03-08 03:41:15
【问题描述】:

所以我已经开始创建一个面板,其中包含两个标签和一个按钮,它们通过框布局在 Y 轴上对齐。

我现在正试图让文本对齐到面板的中心以及 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);

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

【问题讨论】:

    标签: java swing jpanel jlabel boxlayout


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回复。你能告诉我f代表什么吗?谢谢
    • @SkyPlus, Could you tell me what the f represents? - 您是否阅读了给定方法的 API 以查看参数是什么数据类型?您还可以阅读Primitive Data Types 上的 Java 教程。
    猜你喜欢
    • 2021-10-28
    • 2019-04-01
    • 2016-08-26
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多