【问题标题】:JLabel text Y paint coordinateJLabel 文本 Y 绘制坐标
【发布时间】:2014-01-30 23:02:05
【问题描述】:

默认JLabel 在其边界的中间绘制其文本。例如,如果标签的height 为20,font height 为14,则Y 坐标将为(20 - 14)/2 = 3。像这样:

如果要将文本与JLabelboundsTOP对齐怎么办?像这样:

UPD:

public class LabelTest extends JFrame {

    public LabelTest() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(500, 500);

        setLocationRelativeTo(null);

        JPanel contentPanel = new JPanel();
        contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.X_AXIS));

        contentPanel.add(Box.createHorizontalStrut(10));

        final JLabel label1 = new JLabel("JLabel");
        label1.setVerticalAlignment(SwingConstants.TOP); // by the answer of Kevin Workman, doesn't help
        label1.setBorder(BorderFactory.createLineBorder(Color.RED));
        label1.setFont(new Font("Arial", Font.PLAIN, 14));
        contentPanel.add(label1);

        setContentPane(contentPanel);

        setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new LabelTest();
            }
        });
    }
}

【问题讨论】:

    标签: java swing jlabel


    【解决方案1】:

    你应该packing 框架。如果您这样做,标签中应该没有未使用的空间应该。如果您想要空白空间,请使用空白边框

    label.setBorder(new EmptyBorder(0, 0, 5, 0));
    
                               top, left, bottom, right
    

    另外,不要设置尺寸,使用布局管理器并让他们为您调整尺寸。设置尺寸会给你。设置大小会给你一个僵化的外观,在不同的平台上可能看起来和执行不同。布局管理器将使您的 GUI 更加流畅并适应不同的环境。

    有关使用布局的更多信息,请参阅Laying out Components Within a Container

    另见Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?


    【讨论】:

    • 谢谢,它对我有帮助。顺便说一句,最好使用BorderFactory 而不是手动创建EmptyBorder。恕我直言;)
    • 有什么区别?它只是一个便利类,但做同样的事情,不是吗?
    • 是的。我的意思是方便。
    • >如果你想要顶部的标签 哦……我想要text inside the label at the TOP不是 label at the top of parent...
    • 您的第一个没有任何版本的答案是完美的=D
    【解决方案2】:

    一如既往,API 是您最好的朋友:http://docs.oracle.com/javase/7/docs/api/javax/swing/JLabel.html#setVerticalAlignment(int)

    编辑-根据您更新的 SSCCE,问题在于您的 BoxLayout 将 JLabel 缩小到尽可能小,因此垂直文本位置并不重要。尝试使用 BorderLayout 来检查。

    问题在于 JLabel 的插图在 JLabel 的顶部和底部添加了一个小空间,因此即使文本位于顶部,您的文本也看起来居中。这是对插入问题的修复:How to change gap in swing label

    【讨论】:

    • 谢谢,但不,它没有帮助。
    • 我已经写了 label1.setVerticalAlignment(SwingConstants.TOP),但我仍然看到 JLabel 与附上的第一张图片相似。
    • 那么你需要发布一个SSCCE 来证明你做了什么,因为 setVerticalAlignment() 方法对我来说非常有效。
    • SSCCE 附加在 UPD 部分
    • 谢谢。更新了我的答案以解释发生了什么。
    猜你喜欢
    • 1970-01-01
    • 2022-01-23
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多