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

如何在任意Java应用程序中启用抗锯齿?,java,antialiasing,Java,Antialiasing,许多Java应用程序默认情况下不使用抗锯齿字体,尽管Swing可以提供这些字体。如何强制任意java应用程序使用AA字体?(对于我正在运行的应用程序和我正在开发的应用程序)如果您可以访问源代码,则可以通过以下主要方法执行此操作: // enable anti-aliased text: System.setProperty("awt.useSystemAAFontSettings","on"); 或者,(如果您没有访问源代码的权限,或者如果这更容易),您可以通过将以下选项添加到命令行,

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

如果您可以访问源代码,则可以通过以下主要方法执行此操作:

  // enable anti-aliased text:
  System.setProperty("awt.useSystemAAFontSettings","on");
或者,(如果您没有访问源代码的权限,或者如果这更容易),您可以通过将以下选项添加到命令行,将上面的系统属性传递到jvm中:

-Dawt.useSystemAAFontSettings=on

谢谢你的信息。我自己也在想这件事。 我使用SoapUI(www.eviware.com),默认情况下,它不使用AA文本。我补充说
-Dawt.useSystemAAFontSettings=on-Dswing.aatext=对启动它的批处理文件为true,但这没有什么区别。我猜,我必须在他们的论坛上问一下。

记录在案,我发现在我的windows 7机器上

  • 如果我在代码中不使用它,我会得到很好的ClearType亚像素渲染
  • 但是如果我使用这个,我会得到经典的黑白反走样,这是非常丑陋的

所以这个代码应该小心使用。我想,当所有Linux用户都更新到默认情况下能够很好地处理别名的OpenJDK版本时,它就不再需要了。

最新版本的Java 6/7中的Swing控件应该自动遵守系统范围的首选项。(如果您在Windows操作系统上使用Windows L&F,那么如果您在系统范围内启用了该设置,则文本应该使用ClearType呈现。)因此,也许一个解决方案可以是:启用本机外观

在您正在开发的应用程序中,如果您直接呈现自己的文本,您还需要执行类似操作(在调用
Graphics.drawText
或friends之前的某个时候):


参考资料:

它可能将这些参数解释为与应用程序有关,而不是与jvm有关——您可能需要更深入地研究bat文件。(或者它可能不适用于所有应用程序……如果是,请让我知道/投票否决我的答案……)我可以通过编辑.sh启动文件来实现这一点,最后一行是:java-Dawt.useSystemAAFontSettings=on-Dswing.aatext=true-Dsoapui.properties=soapui.properties-Dgroovy.source.encoding=iso-8859-1-cp$soapui_CLASSPATH com.eviware.soapui.SoapUIPro$*我相信通过添加-D。。。。这里列出的JAVA_OPTS行的参数,或者只是在-Dswing.aatext=true上指定JAVA_OPTS=-Dawt.useSystemAAFontSettings=on-Dswing.aatext=true在周围环境中对于Windows上的SoapUI,我编辑了“C:\Program Files(x86)\SmartBear\SoapUI-5.0.0\bin”中的SoapUI-5.0.0.vmoptions文件文件夹中添加-Dawt.useSystemAAFontSettings=on-Dswing.aatext=true作为最后一行。此外,参数的顺序可能会有所不同,您需要在任何
-jar mycoljar.jar
Try System.setProperty(“awt.useSystemAAFontSettings”,“lcd”)之前添加参数;作为linux和windows用户,我不喜欢“ClearType”。我故意禁用了它。这种方法不适用于实体外观,你知道吗?这不适用于
图形#paintString(String,int,int)
如果你使用图形API,这可能会有帮助:将
awt.useSystemAAFontSettings设置为
on
意味着使用抗锯齿而不进行亚像素渲染,这在大多数情况下(使用LCD显示器时)是不可取的。而是使用
lcd
值。请看第一个设置单独工作。不需要使用第二个设置。这是一个未记录的私有设置,已从JRE中删除。详情见:
if (desktopHints == null) { 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    desktopHints = (Map) (tk.getDesktopProperty("awt.font.desktophints")); 
}
if (desktopHints != null) { 
    g2d.addRenderingHints(desktopHints); 
}