JLabel水平定位无法按预期工作

时间:2011-06-09 17:54:38

标签: swing jlabel layout-manager

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

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

但我得到了这个:

enter image description here

蓝色文字,垂直堆叠,绿色边框工作正常,但白色背景和水平居中不会。我也认为标签会跨越JPanel的整个宽度。

我做错了什么?


编辑:错过this question关于背景颜色。所以我剩下的问题是关于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);
    }

}

1 个答案:

答案 0 :(得分:3)

将以下行添加到addLabel()

label.setAlignmentX(CENTER_ALIGNMENT);

有关完整示例,请参阅How To Use BoxLayout

稍后添加:

我找到了直截了当的解决方案:

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

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