尽管Swing能够提供抗锯齿功能,但许多Java应用程序默认情况下不使用抗锯齿字体.如何强制使用任意java应用程序来使用AA字体?(对于我正在运行的应用程序和我正在开发的应用程序)
如果您有权访问源,可以在main方法中执行此操作:
// enable anti-aliased text: System.setProperty("awt.useSystemAAFontSettings","on");
或者,(如果您无权访问源,或者这样更容易),您可以通过将以下选项添加到命令行,将上面的系统属性传递到jvm:
-Dawt.useSystemAAFontSettings=on
最新版本的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
为了记录,我发现在我的Windows 7机器中,
如果我不在代码中使用它,我会得到漂亮的ClearType子像素渲染.
但是,如果我使用它,我会得到经典的黑白抗锯齿,这是非常丑陋的.
因此应谨慎使用此代码.我想当所有Linux用户都更新到默认情况下处理别名的OpenJDK版本时,它将完全不再需要.