繁体   English   中英

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

[英]How do you enable anti aliasing in arbitrary Java apps?

尽管Swing能够提供抗锯齿功能,但许多Java应用程序默认情况下不使用抗锯齿字体。 如何强制使用任意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添加到启动它的批处理文件但是没有什么区别。 猜猜看,我必须在他们的论坛中提问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM