51

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

4

4 回答 4

78

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

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

或者,(如果您无法访问源代码,或者这更容易),您可以通过将这些选项添加到命令行来简单地将上面的系统属性传递到 jvm:

-Dawt.useSystemAAFontSettings=on
于 2008-10-07T19:31:02.457 回答
9

最新版本的 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

于 2012-08-16T15:29:56.553 回答
6

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

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

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

于 2011-01-25T12:41:22.877 回答
0

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

于 2008-10-07T19:42:50.870 回答