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包,因为它有许多函数可用于计算所显示文本的实际高度和位置,这样您就可以将整个字符串移动适当的像素量。
关于java - JLabel 垂直对齐不按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7115065/