13

我想使用 JTextPane 构建一个类似控制台的输出。因此我使用等宽字体:

textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));

这适用于所有类型的字母数字(如 az、0-9 等)字符,但对于像 ' \u2588 ' (█) 这样的符号,字体不再是等宽的。

我忘了什么吗?还是没有包含符号的等宽字体?

4

2 回答 2

15

好的,首先,在我看来,您想在这里解决几个不同的问题,所以我将尝试分别解决它们。

1. 您需要一种字体,对于所有 unicode 字符、符号或其他内容都是等宽的。

根据页面,Unicode 3.2 标准定义了 12886 个字母数字和“符号”字符。Unicode 现在是 6.0,所以我们可以假设这个数字现在更大了。我在这里还假设“字母数字”表示英文字符,因为 Unicode 支持跨越多种语言的超过 100000 个字符。无论如何,12886 个英文识别的字符和符号仍然很多,我怀疑有很多免费字体支持所有这些。

也就是说,我最终使用Courier New的大多数 Java 应用程序都需要具有字符支持的等宽字体。它支持您上面提到的 '\u2588' 字符以及许多其他重要的字符,例如“度”符号。

2.这种等宽字体需要“跨平台”

我肯定知道 Mac OS X 和所有版本的 Windows 支持Courier New,以及我运行的 Linux 版本也支持(RedHat ......不记得版本号),尽管并非所有 Linux 版本本身都有这种字体。无论如何...您可以尝试Courier New看看它是否适合您。如果没有,您可能可以在线找到免费工具来测试字体/字符支持。

最后的想法

我不想这么说,但我怀疑有很多字体支持 Unicode 标准定义的所有字母数字/符号字符,至少是单行距、跨平台和免费的。如果可能的话,可能更值得您花时间弄清楚您需要确定哪些符号,然后选择支持这些符号的字体,并反过来由您知道您将在其上运行应用程序的平台支持。如果您绝对需要支持所有 Unicode 符号,不幸的是,它可能不会免费提供。

于 2012-06-13T19:23:15.810 回答
3

Monospaced 字体适用于 OS X,但不适用于 Windows。奇怪的是 monospaced 被配置为通过 fontconfig.properties 在 Windows 上使用 Courier New。

实际上,我已将此记录为 Oracle 的错误;这是一些在 OS X 上正确呈现的示例代码,但等宽字体在 Windows 上会生成方框。

import java.awt.BorderLayout;
import java.awt.Font;

import javax.swing.JEditorPane;
import javax.swing.JFrame;

public class Test {

    public static void main(String[] args) {
        JFrame f = new JFrame("editor test");
        f.getContentPane().setLayout(new BorderLayout());
        f.add(pane("monospaced"), BorderLayout.NORTH);
        f.add(pane("Courier New"), BorderLayout.SOUTH);
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }

  private static JEditorPane pane(final String name) {
    JEditorPane p = new JEditorPane();
    final Font currFont = p.getFont();
    p.setFont(new Font(name, currFont.getStyle(), currFont.getSize()));
    p.setText(name + " - 8\u1d00.\u1d0d.");
    return p;
  }
}

我尝试将 \u2588 添加到它,并且在 OS X 等宽上看起来也很好。

于 2012-08-14T06:08:40.730 回答