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

Fonts 如何在JavaFX字体中强制消除锯齿?,fonts,javafx,antialiasing,Fonts,Javafx,Antialiasing,在测试JavaFX8应用程序的GUI时,我注意到一些标签没有显示抗锯齿文本。在谷歌搜索和挣扎之后,我发现一件非常令人讨厌的事情正在发生。抗锯齿仅应用于字体大小大于80px的标签。下面是一个比较JavaFX和Swing应用程序与AA应用程序的示例: 示例代码: 有没有办法强制所有字体大小的AA? 你也会这样吗?我在上搜索了一个类似的bug,但到目前为止还没有人对此抱怨。也许我应该为这个开一个 一些可能有帮助的信息: java version "1.8.0" Java(TM) SE Runtime

在测试JavaFX8应用程序的GUI时,我注意到一些标签没有显示抗锯齿文本。在谷歌搜索和挣扎之后,我发现一件非常令人讨厌的事情正在发生。抗锯齿仅应用于字体大小大于80px的标签。下面是一个比较JavaFX和Swing应用程序与AA应用程序的示例:

示例代码:

有没有办法强制所有字体大小的AA? 你也会这样吗?我在上搜索了一个类似的bug,但到目前为止还没有人对此抱怨。也许我应该为这个开一个

一些可能有帮助的信息:

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]

默认情况下,JavaFX8使用
modena.css
设置LCD抗锯齿,在某些情况下,这似乎不会平滑字体。当字体大小大于80像素时,AA技术将切换为灰度AA(出于性能原因)。因此,为了获得任意大小的平滑边缘,应使用灰度AA

这可以通过JavaFX CSS实现:

.text{
    -fx-font-smoothing-type: gray;
}
或系统参数:

-Dprism.lcdtext=false
或设置系统属性(在加载FXML之前):

谢谢所有回复的人

System.setProperty(“prism.lcdtext”、“false”)


必须在加载FXML模板之前调用。我为此打开了一个窗口。我认为默认的文本平滑类型为“灰色”(请参阅),但Modena CSS将其设置为“lcd”。值得注意的是,如果用户界面是从FXML模板加载的,
System.setProperty(“prism.lcdtext”,“false”),否则将无效。
System.setProperty("prism.lcdtext", "false");