美丽(反别名)汉字显示

时间:2010-06-19 09:13:40

标签: java internationalization

alt text http://sites.google.com/site/yanchengcheok/Home/chinese-display.png

最近,我意识到在我的应用程序中显示的汉字相当难看。

我认为我应该让它们成为“反别名”。但是,我怎么能用Java做到这一点?

仅供参考,我没有明确选择我想在GUI应用程序中使用的字体。我完全让系统在启动时决定自己。但是,在显示GUI之前,我会明确设置区域设置。

Locale.setDefault(locale);

系统将始终选择

javax.swing.plaf.FontUIResource [family = Tahoma,name = Tahoma,style = plain,size = 11]

无论我是英语还是中文语言。

2 个答案:

答案 0 :(得分:2)

认为有害的抗锯齿:http://www.joelonsoftware.com/articles/fog0000000041.html

关键是,角色之美不一定是用户界面的目标。这不是一切。您应该寻找的是文本的可读性。当你的汉字看起来不平滑时,它可能正是帮助人眼控制循环知道它处于焦点并停止指责眼睛肌肉模糊的原因。真的,不要陷入这个陷阱。

答案 1 :(得分:1)

这是一种从类路径中读取truetype字体并将其注册到图形环境的方法:

private static Font readFont(String name) {
    InputStream in = Fonts.class.getResourceAsStream(name + ".ttf");
    if (in == null) {
        throw new IllegalArgumentException(name);
    }
    try {
        Font retval = Font.createFont(Font.TRUETYPE_FONT, in);
        GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(retval);
        return retval;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

然后,您可以使用此字体对象来派生不同大小的字符,或者您可以尝试使用Swing CSS应用此字体。在这种情况下,您将放在“font-family”属性中的值是Font.getName()返回的值。

例如:

static {

    Font font = readFont("VeraMono");
    if (font != null) {
        font = font.deriveFont(14f);
    } else {
        throw new IllegalStateException();
    }

    MONOSPACED_TEXT_FONT = font;
    MONOSPACED_TEXT_FONT_STYLE = "font-family: " + font.getName() + "; font-size: 14pt; font-weight: normal;";

}