JLabel垂直对齐未按预期工作[英] JLabel vertical alignment not working as expected

问题描述

Font font = Font("Arial", Font.BOLD, 35);

JLabel label = new JLabel("57");
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
panel.add(label);

这将创建一个 JLabel,其上方和下方都有一个额外的空间.我试过 setVerticalAlignment(SwingConstants.TOP) 但它不起作用.同样,我不想将 JLabel 与顶部对齐,但 JLabel 中的文本应与顶部对齐.

这是我的标签的样子在此处输入图片描述

推荐答案

标签中的文本实际上已经与顶部对齐.即使您设置了所有三个:

label.setVerticalAlignment(JLabel.TOP);
label.setVerticalTextPosition(JLabel.TOP);
panel.setAlignmentY(TOP_ALIGNMENT);

你仍然会发现那个差距.

问题与字体度量有关.字体为变音符号留出了空间,虽然英文数字甚至字母不包含大写字母的变音符号,但 Arial 肯定包含全范围的国际字符,包括高于大写字母的字符,例如德语变音符号 (ÄÖÜ) 或字符包含葡萄牙语变音符号 (ÁÂÃ).

如果您想要一个快速、简单的 hack 解决方案,它可能无法很好地跨字体和平台扩展,您可以在边框上使用负值来补偿字体度量.

label.setBorder(BorderFactory.createEmptyBorder( -3 /*top*/, 0, 0, 0 ));

如果您想"正确"地修复它,您应该学习了解 FontMetrics 包,因为它有许多函数可用于计算正在显示的文本的实际高度和位置,这样您就可以将整个字符串移动适当的数量像素.

本文地址:https://www.itbaoku.cn/post/978723.html