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

rcr*_*ick 50 java antialiasing

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

rcr*_*ick 73

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

  // enable anti-aliased text:
  System.setProperty("awt.useSystemAAFontSettings","on");
Run Code Online (Sandbox Code Playgroud)

或者,(如果您无权访问源,或者这样更容易),您可以通过将以下选项添加到命令行,将上面的系统属性传递到jvm:

-Dawt.useSystemAAFontSettings=on
Run Code Online (Sandbox Code Playgroud)

  • 将`awt.useSystemAAFontSettings`设置为`on`意味着*使用抗锯齿**而不使用子像素渲染***这是大多数时候(使用LCD显示时)**不是**首选.而是使用`lcd`值.见http://wiki.netbeans.org/FaqFontRendering (8认同)
  • +1我每天都学到新东西.谢谢! (2认同)

Luk*_*ood 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); 
} 
Run Code Online (Sandbox Code Playgroud)

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


Al-*_*zmi 6

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

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

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

  • 尝试System.setProperty("awt.useSystemAAFontSettings","lcd"); 你应该得到ClearType. (7认同)