【问题标题】:In Java Swing, why is this font size incorrect?在 Java Swing 中,为什么这个字体大小不正确?
【发布时间】:2020-10-30 07:40:33
【问题描述】:

我试过好几个版本的Java Swing,但是这个字体大小总是不正确,什么时候修复?

JButton lButton=new JButton("\u24c1");
lButton.setFont(new Font("Monospaced",0,23));

JButton mButton=new JButton("\u24c2");               // (M) is always smaller, why ?!
mButton.setFont(new Font("Monospaced",0,23));

JButton nButton=new JButton("\u24c3");
nButton.setFont(new Font("Monospaced",0,23));

如下图所示,中间的(M)总是比较小,为什么?!

【问题讨论】:

  • 如果将第 3 行更改为 JButton mButton=new JButton("\u24c1"); ?在我看来,“\u24c2”只是对应于一个较小的圆圈。
  • Not reproducible 在 Windows 10 和 Java 8 上

标签: java swing font-size


【解决方案1】:

中间的 M 很可能来自与其他字体不同的字体。带圆圈的 M 字符是“表情符号”的一部分(它可以用作“地铁”符号),因此包含它的字体比带圆圈的 L 或 N 更多。比较 https://unicode-table.com/en/24C1/https://unicode-table.com/en/24C2/

要解决此问题,您可能需要考虑使用特定字体而不是“等宽”逻辑字体,如 java.awt.Font API specification 所述:

通常,每个逻辑字体名称都映射到几种物理字体,以覆盖大范围的字符

【讨论】:

  • 但是你不认为这是 jdk/jre 中的错误吗,我在代码中使用了相同的字体,相同的大小,它应该显示相同的类型,相同的大小,不应该Java Swing 自动为我做那件事?其他带圆圈的字符怎么样,它们看起来都一样大。
  • 在我看来不是错误。 “等宽”是一种抽象,它可能为每个字符选择不同的字体,因此您没有“使用相同的字体”。如果您希望文本在所有系统上一致显示,请使用特定的具体字体。
猜你喜欢
  • 2013-05-11
  • 2015-04-07
  • 2016-02-09
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2017-12-30
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多