【问题标题】:How to force anti-aliasing in JavaFX fonts?如何在 JavaFX 字体中强制抗锯齿?
【发布时间】:2014-08-06 21:16:48
【问题描述】:

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

示例代码: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]

【问题讨论】:

标签: fonts javafx antialiasing


【解决方案1】:

默认情况下,JavaFX 8 使用modena.css 设置 LCD 抗锯齿,这在某些情况下似乎无法平滑字体。当字体大小大于 80 px 时,AA 技术切换到灰度 AA(出于性能原因)。因此,要实现任何尺寸的平滑边缘,应改为使用灰度 AA

这可以通过 JavaFX CSS 完成:

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

或系统参数:

-Dprism.lcdtext=false

或设置系统属性(在加载 FXML 之前):

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

感谢所有回复Jira的人!

【讨论】:

  • 我认为默认的文本平滑类型是“灰色”(参见docs.oracle.com/javafx/2/api/javafx/scene/doc-files/cssref.html),但Modena CSS 将其设置为“lcd”。
  • 值得注意的是,如果 UI 是从 FXML 模板加载的,则应在 加载之前调用 System.setProperty("prism.lcdtext", "false");,否则将不起作用。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 2010-11-28
    • 1970-01-01
    • 2015-07-31
    • 2014-02-18
    • 2023-03-25
    相关资源
    最近更新 更多