许多Java应用程序默认不使用抗锯齿字体,尽管Swing能够提供抗锯齿字体。 如何强制任意 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 版本时,它将完全不再需要。
感谢您提供的信息。我自己也在想这个问题。我使用SoapUI(www.eviware.com),默认情况下,它不使用AA文本。我添加了-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true 到启动它的批处理文件,但这并没有区别。猜猜,我必须在他们的论坛上问。