JLabel 水平定位未按预期工作

发布于 2024-11-15 05:47:35 字数 1687 浏览 1 评论 0原文

这是一个 JFrame,我打算用一系列具有以下属性的 JLabels 来显示它:

  • 堆叠垂直
  • 居中水平
  • 绿色边框
  • 白色背景
  • 蓝色文本

但我得到了这个:

在此处输入图像描述

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

我做错了什么?


编辑:错过了关于背景颜色的这个问题。所以我剩下的问题是关于 BoxLayout 和组件在另一个轴上的定位。


import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class BoxLayoutLabelsTest extends JFrame
{
    public BoxLayoutLabelsTest(String title)
    {
        super(title);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        addLabel(panel, "Hydrogen");
        addLabel(panel, "Helium");
        addLabel(panel, "Lithium");
        addLabel(panel, "Beryllium");
        addLabel(panel, "Boron");

        setContentPane(panel);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    static private void addLabel(JPanel panel, String text) {
        JLabel label = new JLabel(text);
        label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        label.setBackground(Color.WHITE);
        label.setForeground(Color.BLUE);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        panel.add(label);
    }

    public static void main(String[] args) {
        new BoxLayoutLabelsTest("BoxLayoutLabelsTest").setVisible(true);
    }

}

Here's a JFrame which I intended to show with a series of JLabels with the following properties:

  • stacked vertically
  • centered horizontally
  • green border
  • white background
  • blue text

But I get this instead:

enter image description here

The blue text, stacked vertically, green border work OK but the white background and centered horizontally do not. I also would have thought the labels would span the entire width of the JPanel.

What am I doing wrong?


edit: Missed this question about background color. So my remaining question is about BoxLayout and the positioning of components in the other axis.


import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class BoxLayoutLabelsTest extends JFrame
{
    public BoxLayoutLabelsTest(String title)
    {
        super(title);
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
        addLabel(panel, "Hydrogen");
        addLabel(panel, "Helium");
        addLabel(panel, "Lithium");
        addLabel(panel, "Beryllium");
        addLabel(panel, "Boron");

        setContentPane(panel);
        pack();
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    static private void addLabel(JPanel panel, String text) {
        JLabel label = new JLabel(text);
        label.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        label.setBackground(Color.WHITE);
        label.setForeground(Color.BLUE);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        panel.add(label);
    }

    public static void main(String[] args) {
        new BoxLayoutLabelsTest("BoxLayoutLabelsTest").setVisible(true);
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

人间不值得 2024-11-22 05:47:35

将以下行添加到 addLabel() 中:

label.setAlignmentX(CENTER_ALIGNMENT);

请参阅 如何使用 BoxLayout 获取完整示例。

稍后添加:

我找到了简单的解决方案:

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

这也有效,但是您使用 BorderLayout 的解决方案似乎更合适。

Add the following line into addLabel():

label.setAlignmentX(CENTER_ALIGNMENT);

See How To Use BoxLayout for complete example.

Added later:

I've found straightforward solution:

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

This also works, but your solution with BorderLayout seems more appropriate.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文