许多Java应用程序默认不使用抗锯齿字体,尽管Swing可以提供这些字体。如何强制任意Java应用程序使用抗锯齿字体?(包括我正在运行的应用程序和我正在开发的应用程序)
许多Java应用程序默认不使用抗锯齿字体,尽管Swing可以提供这些字体。如何强制任意Java应用程序使用抗锯齿字体?(包括我正在运行的应用程序和我正在开发的应用程序)
If you have access to the source, you can do this in the main method:
// enable anti-aliased text:
System.setProperty("awt.useSystemAAFontSettings","on");
或者,(如果您没有访问源代码的权限,或者这样更容易),您可以通过将上述系统属性直接添加到命令行中来将它们传递给 JVM:
或者,(如果您没有访问源代码的权限,或者这样更容易),您可以通过将上述系统属性直接添加到命令行中来将它们传递给 JVM:
-Dawt.useSystemAAFontSettings=on
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
这篇文章讨论了字体渲染的问题。它解释了字形平滑和抗锯齿技术,并讨论了Subpixel渲染和字体hinting的工作原理。此外,它还指出了一些在Java应用程序中实现最佳字体显示的注意事项。记录一下,在我的Windows 7机器上,
因此,应该谨慎使用此代码。我猜想当所有Linux用户都更新到默认处理抗锯齿的OpenJDK版本时,这个设置可能就不再需要了。
感谢提供这些信息。我自己也在思考这个问题。 我使用SoapUI(www.eviware.com),默认情况下它不使用AA文本。我添加了-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true到启动它的批处理文件中,但是没有任何改变。看来我得去他们的论坛问问了。
Graphics#paintString(String, int, int)
不起作用。 - Ky -awt.useSystemAAFontSettings
设置为on
表示使用抗锯齿但不使用子像素渲染,这在大多数情况下(使用液晶显示器时)不是首选。 而应该使用lcd
值。请参见http://wiki.netbeans.org/FaqFontRendering。 - Piotr Dobrogost