如何在任意Java应用程序中启用抗锯齿?

时间:2008-10-07 19:28:27

标签: java antialiasing

许多Java应用程序默认情况下不使用消除锯齿字体,尽管Swing能够提供它们。如何强制使用任意java应用程序来使用AA字体? (对于我正在运行的应用程序和我正在开发的应用程序)

4 个答案:

答案 0 :(得分:71)

如果您有权访问源,可以在main方法中执行此操作:

  // enable anti-aliased text:
  System.setProperty("awt.useSystemAAFontSettings","on");

或,(如果您无权访问源,或者这样更容易),只需将以上系统属性添加到jvm中,方法是将这些选项添加到命令行:

-Dawt.useSystemAAFontSettings=on

答案 1 :(得分:7)

最新版本的Java 6/7中的Swing控件应自动遵循系统范围的首选项。 (如果您在Windows操作系统上使用Windows L& F,那么如果您在系统范围内启用了该设置,则应使用ClearType呈现文本。)因此,也许一个解决方案可能只是:启用本机外观?

在你正在开发的应用程序中,如果你直接渲染自己的文本,你还需要做这样的事情(在调用Graphics.drawText或朋友之前的某个时刻):

if (desktopHints == null) { 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    desktopHints = (Map) (tk.getDesktopProperty("awt.font.desktophints")); 
}
if (desktopHints != null) { 
    g2d.addRenderingHints(desktopHints); 
} 

参考:http://weblogs.java.net/blog/chet/archive/2007/01/font_hints_for.html

答案 2 :(得分:6)

为了记录,我发现在我的Windows 7机器上,

  • 如果我在代码中不使用它,我会得到漂亮的ClearType子像素渲染。
  • 但如果我使用它,我会得到经典的黑白抗锯齿,这是非常丑陋的。

因此应谨慎使用此代码。我想当所有Linux用户都更新到默认处理别名的OpenJDK版本时,它将完全不再需要。

答案 3 :(得分:0)

感谢您的信息。我自己也在想这个。 我使用SoapUI(www.eviware.com),默认情况下它不使用AA文本。我补充道 -Dawt.useSystemAAFontSettings = on -Dswing.aatext = true启动它的批处理文件但是没有什么区别。猜猜看,我必须在他们的论坛上提问。