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

许多Java应用程序默认情况下不使用反锯齿字体,尽pipeSwing具有提供这些字体的function。 你如何强制任意Java应用程序使用AA字体? (对于我正在运行的应用程序以及我正在开发的应用程序)

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

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

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

 -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true 

最新版本的Java 6/7中的Swing控件应该自动遵守系统范围的首选项。 (如果您在Windows操作系统上使用Windows L&F,那么如果您在系统范围内启用了该设置,则应该使用ClearType呈现文本。)所以也许有一种解决scheme可以简单地:启用本机外观和感觉?

在你正在开发的应用程序中,如果你直接渲染你自己的文本,你还需要做这样的事情(在调用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

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

  • 如果我不在我的代码中使用这个,我会得到很好的ClearType子像素渲染。
  • 但是,如果我使用这个,我得到了古典的黑白反锯齿,这是更丑陋的。

所以这个代码应该小心使用。 当所有的Linux用户更新到OpenJDK版本,默认处理别名的时候,我想这将不再需要。

谢谢(你的)信息。 我自己在想这个。 我使用SoapUI(www.eviware.com),默认情况下不使用AA文本。 我在启动它的batch file中添加了-Dawt.useSystemAAFontSettings = on -Dswing.aatext = true,但是没有什么区别。 猜猜,我必须在他们的论坛上提问。