JTextPane中第一个字母左侧/意外排版行为的意外填充

时间:2014-08-02 21:55:06

标签: java swing fonts jtextpane typography

我通过扩展JTextPane实现了多行标签。构造函数设置各种属性以使其看起来像一个标签,包括禁用任何边框/设置边距为0,效果很好。

环境:

  • 使用jgoodies-looks-2.6.0
  • 设置com.jgoodies.looks.windows.WindowsLookAndFeel L& F(也使用javax.swing.plaf.metal.MetalLookAndFeel测试,同样的问题)
  • Windows 8 x64
  • Java SE 1.7

当我增加字体大小时,第一个字母有时会在其左边有“空格”/ 19pt的边距~1px(可能随字体大小增加)。至少对于字母B,F和L这种情况会发生,但肯定不适用于A.以下是一个例子:

enter image description here enter image description here

在左侧,您可以清楚地看到布局看起来很糟糕,标题左侧有这个奇怪的边距。请注意,带编号(1861)的第一行是常规JLabel。

放大确认这一点(粉色线用于说明):

enter image description here enter image description here

所以从我看到的排版是不合适的。

这可以被视为摆动中的错误吗?有办法解决这个问题吗?例如。在这种情况下,是否有一种简单而干净的方式(即不是油漆())方式对摆动中的印刷特征进行细粒度控制?

编辑:

这与我的期望相似:

enter image description here enter image description here

vs之前:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

如果你在这里查看截图:

The image

特别是看看1861 ......你可以看到1的两边都有一个更大的空间。特别是1到8之间和6到1之间的差距大于8到6之间的差距。 。

这就是如何在特定字体上排列布局。他们清楚地认为1被推得太靠近周围的角色,所以他们在两边都增加了更多的空间。

“修复”此选项的选项有限。

  1. 使用其他字体。
  2. 将线条渲染为图像,扫描空列,将其向左移动
  3. 为常见字符构建一些手动黑客(即如果字符串以1开头,则将该行拖入1像素
  4. 故意缩进或突出标题所以它没有排列,然后偏移不再可见。
  5. 1861
        Baked Beans
        dkjfdf skdfjsdlf