2012-06-13 33 views
10

我想使用JTextPane构建类似控制台的输出。所以我使用的是等宽字体:JTextPane的等宽字体/符号

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

这对所有类型的alphanum的正常工作(如AZ,0-9等)的字符,但是当涉及到符号,如“ \ u2588”(█ ),字体不再等宽。

我忘了什么吗?或者没有包含smybols的等宽字体?

回答

10

好的,首先,对我来说听起来像你试图在这里解决一些不同的事情,所以我会尽力分别解决它们。

1.您需要为所有Unicode字符,符号或其他字体等宽的字体。

根据this页面,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符号,不幸的是,它可能不会免费。

+0

带有字母字符我的意思是Z,0-9等。Courier New对我来说工作得很好。 – user28061

+0

我推荐一个漂亮的免费跨平台字体的源代码。您需要将其捆绑到安装程序中,或让用户手动安装它。 https://github.com/adobe-fonts/source-code-pro/releases – Appak

3

等宽字体适用于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等宽外观上也很好。