如何在JavaFX字体中强制消除锯齿?

时间:2014-06-17 00:14:12

标签: fonts javafx antialiasing

在测试我的JavaFX 8应用程序的GUI时,我注意到有些标签没有显示消除锯齿的文本。经过一番谷歌搜索和挣扎,我发现了一件非常烦人的事情。抗锯齿仅适用于字体大小超过80像素的标签。下面是一个将JavaFX和Swing应用程序与应用AA进行比较的示例:

enter image description here

示例代码:https://gist.github.com/anonymous/be60bb89181376ff12aa

有没有办法强制所有字体大小的AA? 这也发生在你身上吗?我在JavaFX Jira上搜索了一个类似的错误,但到目前为止还没有人抱怨。也许我应该为此打开一个?

可能会有所帮助的一些信息:

java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
Windows 8.1 64 bits [Version 6.3.9600]

2 个答案:

答案 0 :(得分:33)

默认情况下,JavaFX 8使用modena.css来设置LCD抗锯齿,在某些情况下似乎不会平滑字体。当字体大小大于80时,AA技术变为灰度AA(出于性能考虑)。因此,为了获得任何尺寸的平滑边缘,应该使用灰度AA。

这可以通过CSS完成:

.text{
    -fx-font-smoothing-type: gray;
}

或通过系统参数:

-Dprism.lcdtext=false

或设置系统属性:

System.setProperty("prism.lcdtext", "false");

感谢所有回复Jira的人!

答案 1 :(得分:0)

System.setProperty("prism.lcdtext", "false");

必须在加载FXML模板之前被调用