当前位置: 首页 > 面试题库 >

JLabel垂直对齐未按预期工作

骆照
2023-03-14
问题内容

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绝对包含完整的国际字符,包括比大写字母高的字符,例如德国变音符号(ÄÖÜ)或其他字符包含葡萄牙语变音符号(Áâ)。

如果您想要一种快速,简单的解决方案,这种方法可能无法很好地在字体和平台之间进行缩放,则可以在边框上使用负值来补偿字体指标。

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

如果您想“正确”地修复它,则应该学习有关
FontMetrics
软件包的知识,因为它具有许多功能,这些功能可能对计算所显示文本的实际高度和位置很有用,因此您可以将
整个字符串移动适当数量的像素。



 类似资料:
  • 阅读引导文档,您可以看到对齐示例部分。 它告诉您可以使用use flexbox对齐实用工具以引导CSS类的形式垂直和水平对齐列、和,但是当我尝试它时,内容并没有像预期的那样垂直对齐全高,请参见下面的代码: 我希望在的垂直中间有内容,在的底部有内容。 我做错了什么还是误解了什么?

  • 垂直对齐 1. grid-template-areas 属性值保持换行,并使用空格保持每列垂直对齐。 例如: .foo { grid-template-areas: "header header" "nav main" "footer ...."; } 2. grid、grid-template

  • 问题内容: 我在浮动div中有一个img,但我不知道如何垂直居中。 垂直对齐:当然中间不起作用。 问题答案: 要在父元素中垂直对齐文本,并谨记的是一个内联元素等行为 类似 文本,你可以简单地设置到父元素: 。

  • 在CSS中,行框的高度总是足以容纳它包含的所有行内级框,当一个行内级框 B 的高度小于包含它的行框高度时,则由 vertical-align属性 来决定B在行框中垂直对齐的位置。因此,vertical-align属性只对行内级元素有效,对块级元素无效。并且,该属性不能被子元素继承。 在垂直对齐时,行内非替换元素的行内级框是由 line-height 的高度定义的框,即在内容区的上下各添加半行距后的

  • 问题内容: 我有一个包含图像和ap标签的div(如下所示)。我想根据段落的多少行在div的中间垂直对齐图像。垂直对齐不起作用。我现在正在使用JavaScript找出要添加到margin- top的数量,但是宁愿使用CSS。有任何想法吗? 问题答案: 尝试将元素的属性设置为图像的高度,例如: 编辑: 刚意识到我读错了问题,却错过了多行的事实。尝试的一种选择是完全删除元素,并将其设置为of的,使用的o

  • 我能够在iothub消息(从云到设备的消息)上打开一个侦听器,但我无法订阅direct方法。我尝试使用mqtt支持,而不是iothub库 我已经跟踪https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-direct-methods#mqtt但一定有一个小细节我还没有设法做到正确 这是我的代码(python)