我想使用 JTextPane 构建一个类似控制台的输出。因此,我使用的是等宽字体:
textpane.setFont(new Font(Font.MONOSPACED, Font.PLAIN, 12));
这适用于所有类型的 alphanum(如 a-z、0-9 等)字符,但当涉及到像"\u2588"(█) 这样的符号时,字体不再是等宽的。
我忘了什么吗?或者没有包含 smybols 的等宽字体?
好的,首先,在我看来,您似乎正在尝试在这里解决一些不同的事情,所以我将尝试分别解决它们。
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符号,它可能不会免费。
宽字体适用于OS X,但不适用于Windows。奇怪的是,等宽被配置为通过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 + " - 8u1d00.u1d0d.");
return p;
}
}
我尝试向其添加\u2588,在OS X等宽上看起来也不错。