在JavaFX中全局设置字体

Pet*_*zov 12 javafx javafx-2 javafx-8

如何在JavaFX应用程序中全局设置Font类型?

有什么解决方案可供我使用吗?在JavaFX 8中,默认的Font已经改变,我想使用JavaFX 2.2中使用的相同Font.

nyy*_*kki 24

您可以使用Oracle网站上所述的 CSS为您的应用程序设置外观.使用以下语法,您可以为应用程序设置常规主题:

.root{
    -fx-font-size: 16pt;
    -fx-font-family: "Courier New";
    -fx-base: rgb(132, 145, 47);
    -fx-background: rgb(225, 228, 203);
}
Run Code Online (Sandbox Code Playgroud)

你包括c​​ss如下:

scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
Run Code Online (Sandbox Code Playgroud)

  • 在主窗口上有效,但在子窗口上无效 (2认同)

Phi*_*ner 9

FWIW,如果您想以编程方式更改字体(不涉及外部 css 文件),您可以使用.setStyle()顶部父节点上的方法进行“全局”更改。

例如,我编写了一个快速 GUI(一个简单的测试框架),Windows 和 Mac 用户都需要运行它(我正在 Linux/Ubuntu 上编写)。Mac 用户抱怨字体太小。所以我添加了以下内容:

String os = System.getProperty("os.name","generic").toLowerCase(Locale.US);
if (os.indexOf("mac") > 0) {
    root.setStyle("-fx-font-size: 14pt");           
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,是实例化Parent中的节点Scene。连接到root 的所有节点都将共享此字体大小设置,除非该设置被覆盖。


jew*_*sea 5

更改场景的默认字体

这是nyyrikki的答案中脱节的解决方案。

通过将以下CSS样式表应用于场景,可以更改任何给定场景中用于大多数事物的默认字体:

.root {
  -fx-font: 28px Vivaldi;
}
Run Code Online (Sandbox Code Playgroud)

-fx-font根据JavaFX CSS参考指南中字体定义,将所需的任何设置替换为该值。

更改应用程序的默认字体

如果要更改JavaFX应用程序中用于大多数操作的默认字体,则可以使用Application.setUserAgentStylesheet覆盖默认样式表。使用此方法,您可以将JavaFX 8应用程序的默认样式设置为JavaFX 2.2所默认的里海样式表,而不是JavaFX 8默认的modena样式表。如果您想要两种默认样式的某种混合或某些自定义默认样式样式表(例如AquaFX),则您需要自己执行自定义。

切换字体渲染技术

此外,在某些平台上,JavaFX 2.2使用与JavaFX 8不同的字体渲染机制,这可以解释两者之间字体渲染的细微差异。有一个未记录且不受支持的命令行开关,可用于在JavaFX 8中的字体呈现机制之间进行切换,但是我不知道该开关是临时使用的,即使这样做,我也不建议部署不支持使用该开关的应用程序。