【发布时间】:2010-09-15 20:22:58
【问题描述】:
默认情况下,许多 Java 应用程序不使用消除锯齿字体,尽管 Swing 能够提供它们。你如何强制一个任意的 java 应用程序使用 AA 字体? (对于我正在运行的应用程序和我正在开发的应用程序)
【问题讨论】:
标签: java antialiasing
默认情况下,许多 Java 应用程序不使用消除锯齿字体,尽管 Swing 能够提供它们。你如何强制一个任意的 java 应用程序使用 AA 字体? (对于我正在运行的应用程序和我正在开发的应用程序)
【问题讨论】:
标签: java antialiasing
如果你可以访问源,你可以在main方法中这样做:
// enable anti-aliased text:
System.setProperty("awt.useSystemAAFontSettings","on");
或者,(如果您无法访问源代码,或者这更容易)您可以通过将这些选项添加到命令行来简单地将上述系统属性传递到 jvm:
-Dawt.useSystemAAFontSettings=on
【讨论】:
Graphics#paintString(String, int, int)
awt.useSystemAAFontSettings 设置为on 意味着使用抗锯齿不进行亚像素渲染,这是大多数时候(使用LCD 时)显示)不是首选。而是使用lcd 值。见wiki.netbeans.org/FaqFontRendering
Java 6 / 7 最新版本中的 Swing 控件应自动遵守系统范围的偏好。 (如果您在 Windows 操作系统上使用 Windows L&F,那么如果您在系统范围内启用了 ClearType 设置,则文本应该使用 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 机器上,
所以应该谨慎使用这段代码。我想当所有 Linux 用户都更新到默认情况下可以很好地处理别名的 OpenJDK 版本时,它就不再需要了。
【讨论】:
感谢您的信息。我自己也在想这个。 我使用 SoapUI(www.eviware.com),默认情况下它不使用 AA 文本。我添加了 -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true 到启动它的批处理文件,但没有任何区别。猜猜,我必须在他们的论坛上问。
【讨论】:
-jar mycooljar.jar之前添加参数