Swing字体渲染

4
我正在开发一个使用Synth外观的Java Swing应用程序。该应用程序具有包含一些文本的背景图像,并且我需要在该背景层上方有一些“活动”文本(JLabel中的文本)。然而,我选择的字体(Verdana)在Swing中渲染出现问题,因此,活动文本的字体与背景的字体不匹配。有人知道如何使Swing中的文本看起来更光滑的方法吗?我在这里这里找到了类似的问题,但我不确定AA对于其他应用程序图片的影响或是否使用AWT桌面属性或-Dswing.aatext=true标志。欢迎提供任何提示。谢谢!编辑:我已在OSX和Windows 7中进行了测试,两者都表现出相同的效果。

2
不要进行自定义文本绘制,相反地应该使用组件(例如JLabel)来配置文本并将该标签渲染在图形的上方。 - kleopatra
嗯...JLabel看起来不好?这很奇怪,自从6u10以来就没有看到过太多的锯齿问题。是时候准备一个SSCCE了。 - kleopatra
2
请发布您的sscce,并附上一张图片以供比较,例如:e.g. - trashgod
好的,谢谢您的查看,我今晚稍后会发布一个 SSCCE。 - SuperTron
嗯,看起来我无法再现这个问题了...猜想它是隐藏在我的应用程序中的某个地方。如果我发现任何其他问题,我会更新的,再次感谢您。 - SuperTron
显示剩余2条评论
2个回答

3
这似乎是Swing本身存在的问题。请查看相关问题。
根据我的经验,使用FontForge禁用提示可能会有所帮助。

1
问题在于我不能在每个用户的计算机上都执行这个过程 :O - SuperTron
如果你可以切换,SWT在字体渲染方面做得更好。否则,也许有一些字体渲染库可以找到。 - Garrett Hall
Linux对hinting的恐惧 :-) 好奇:如果将awt.desktophints(如http://java.sun.com/javase/6/docs/api/java/awt/doc-files/DesktopProperties.html中所述)设置为关闭,会发生什么? - kleopatra

0

我找到了解决这个问题的方法。主要思路是激活抗锯齿功能,这需要在Swing和AWT中都进行设置。这些属性分别是:swing.aatextawt.useSystemAAFontSettings,并且必须在操作系统级别上激活。

一种做法是使用一个批处理程序来为您进行设置,但我更喜欢尽可能只有一个可执行文件。

所以,我找到的解决方案是使用System.setProperty(String key, String value)。将swing.aatext设置为true,而将awt.useSystemAAFontSettings设置为on。当然,在启动应用程序时,尽早进行这些设置。

以下是一个典型的Swing应用程序示例:

public class App {
    public static void main(String[] args)
    {
        JFrame mainWindow = null;

        try {
            System.setProperty( "swing.aatext", "true" );
            System.setProperty( "awt.useSystemAAFontSettings", "on" );
            UIManager.setLookAndFeel(
                UIManager.getSystemLookAndFeelClassName()
            );
        } catch (Exception e) { }

        // Make sure we have nice window decorations.
        JFrame.setDefaultLookAndFeelDecorated( true );
        JDialog.setDefaultLookAndFeelDecorated( true );

        try {
            mainWindow = new MainWindow();
            mainWindow.setVisible( true );
        } catch(Exception e) {
            e.printStackTrace();
            System.err.println( e.getLocalizedMessage() );
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接