美丽的(反锯齿 - anti alias)汉字显示

yccheok 发布于 2010/06/19 17:22
阅读 896
收藏 1

最近,我发现,在我的GUI应用程序, 中文显示蛮丑陋的。

我认为我应该让他们(反锯齿 - anti alias)。但是,如何在Java要如何实现呢?

在我的GUI应用程序,我并没有明确选择的我想要的字体。我只让用系统默认的设定。

系统每次都会作出以下选择,不管我是在中文还是英文的Locale.

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

谢谢。

 

加载中
0
mallon
mallon

Font font = new Font("Dialog",Font.PLAIN,12);  
UIManager.put("ToolTip.font",font);  
UIManager.put("Table.font",font);  
UIManager.put("TableHeader.font",font);  
UIManager.put("TextField.font",font);  
UIManager.put("ComboBox.font",font);  
UIManager.put("TextField.font",font);  
UIManager.put("PasswordField.font",font);  
UIManager.put("TextArea.font",font);  
UIManager.put("TextPane.font",font);  
UIManager.put("EditorPane.font",font);  
UIManager.put("FormattedTextField.font",font);  
UIManager.put("Button.font",font);  
UIManager.put("CheckBox.font",font);  
UIManager.put("RadioButton.font",font);  
UIManager.put("ToggleButton.font",font);  
UIManager.put("ProgressBar.font",font);  
UIManager.put("DesktopIcon.font",font);  
UIManager.put("TitledBorder.font",font);  
UIManager.put("Label.font",font);  
UIManager.put("List.font",font);  
UIManager.put("TabbedPane.font",font);  
UIManager.put("MenuBar.font",font);  
UIManager.put("Menu.font",font);  
UIManager.put("MenuItem.font",font);  
UIManager.put("PopupMenu.font",font);  
UIManager.put("CheckBoxMenuItem.font",font);  
UIManager.put("RadioButtonMenuItem.font",font);  
UIManager.put("Spinner.font",font);  
UIManager.put("Tree.font",font);  
UIManager.put("ToolBar.font",font);  
UIManager.put("OptionPane.messageFont",font);  
UIManager.put("OptionPane.buttonFont",font);  

0
mallon
mallon

或者你把字体调大一号看看

Vista以下的Windows自带的宋体、黑体...不带反锯齿功能的

0
yccheok
yccheok

我觉得可把代码简化成

    /**
     * Changes the default font of our application.
     *
     * @param f The font
     */
    public static void setUIFont(javax.swing.plaf.FontUIResource f){
        //
        // sets the default font for all Swing components.
        // ex.
        //  setUIFont (new javax.swing.plaf.FontUIResource
        //   ("Serif",Font.ITALIC,12));
        //
        java.util.Enumeration keys = UIManager.getDefaults().keys();
        while (keys.hasMoreElements()) {
            Object key = keys.nextElement();
            Object value = UIManager.get (key);
            if (value instanceof javax.swing.plaf.FontUIResource) {
                UIManager.put (key, f);
            }
        }
    }

    setUIFont(new javax.swing.plaf.FontUIResource("Dialog",java.awt.Font.PLAIN,12));

我尝试过了,效果还是不美。没有反锯齿功能。这样说来,我是不是应该用Customized的Font?楷体的似乎很漂亮。请问哪里有高素质且开源的可下载吗?

0
yccheok
yccheok

我用了一下代码实现以上的效果。不知在中国用户眼中,这楷体还算美吗?

我是从这儿下载的

http://www.clearchinese.com/resources/fonts.htm

Font font = null;
String fName = "/fonts/" + "HDZB_75.TTF";
try {
    InputStream is = MainFrame.class.getResourceAsStream(fName);
    font = Font.createFont(Font.TRUETYPE_FONT, is);
} catch (Exception ex) {
    ex.printStackTrace();
    System.err.println(fName + " not loaded.  Using serif font.");
    font = new Font("serif", Font.PLAIN, 24);
}
Utils.setUIFont(font.deriveFont(13.0f));

0
BossKiller
BossKiller

系统默认宋体,挺好,不用修改阿。

我觉得宋体比较符合我们中国一般用户的习惯,WinXP简体中文版都是使用宋体为主的,Vista/Win7也有宋体。楷体如果使用了anti alias,反而有点发虚,颜色太淡了。所以小字体用宋体是不错的选择。

0
yccheok
yccheok

您说的宋体就是我第一张贴吗?

0
红薯
红薯

软件最好不要去指定字体,让操作系统执行选择呗。

0
Sephiroth
Sephiroth

建议宋体,以前开发过一个game引擎,依赖字体抗锯齿,结果兼容很差...

返回顶部
顶部