【问题标题】:Monospaced font/symbols for JTextPaneJTextPane 的等宽字体/符号
【发布时间】:2012-06-16 18:29:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java unicode symbols jtextpane monospace


    【解决方案1】:

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

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

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

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

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

    我确定 Mac OS X 和所有版本的 Windows 都支持Courier New,并且我运行的 Linux 版本也支持(RedHat...不记得版本号),虽然不是所有的 Linux 版本本机具有此字体。无论如何......你可以试试Courier New,看看它是否适合你。如果没有,您可能可以在网上找到免费工具来测试字体/字符支持。

    最后的想法

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

    【讨论】:

    • 对于字母数字字符,我的意思是 a-Z、0-9 等。Courier New 对我来说效果很好。
    • 我推荐 source code pro 获得一个不错的免费跨平台字体。您要么需要将其捆绑在您的安装程序中,要么让您的用户手动安装它。 github.com/adobe-fonts/source-code-pro/releases
    【解决方案2】:

    等宽字体适用于 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 + " - 8\u1d00.\u1d0d.");
        return p;
      }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 2019-04-08
      • 1970-01-01
      • 2020-12-17
      • 2015-12-18
      • 1970-01-01
      相关资源
      最近更新 更多