在JavaFX中全局设置字体

时间:2013-08-23 17:50:34

标签: javafx-2 javafx javafx-8

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

我可以使用任何解决方案吗?在JavaFX 8中,默认的Font已经改变,我想使用JavaFX 2.2中使用的相同Font。

4 个答案:

答案 0 :(得分:24)

您可以按照on the Oracle Website所述使用CSS为应用程序设置外观。 使用以下语法,您可以为应用程序设置常规主题:

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

您包含以下css:

scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

答案 1 :(得分:4)

更改场景的默认字体

这是nyyrikki回答中的解决方案。

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

.root {
  -fx-font: 28px Vivaldi;
}

根据font definition in the JavaFX CSS reference guide替换-fx-font值所需的任何设置。

更改应用程序的默认字体

如果要更改JavaFX应用程序中大多数内容使用的默认字体,可以使用Application.setUserAgentStylesheet覆盖默认样式表。使用此方法,您可以将JavaFX 8应用程序的默认样式设置为caspian样式表,这是JavaFX 2.2的默认样式,而不是JavaFX 8默认的modena样式表。如果您想要某些混合使用两个默认样式或一些自定义默认样式表,如AquaFX,那么您需要自己执行自定义。

切换字体渲染技术

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

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:1)

只是一个TornadoFX示例

package bj

import tornadofx.*

class MyView : View() {
    override val root = vbox {
        button("天地玄黄")
        button("宇宙洪荒")
    }
}

class MyStylesheet : Stylesheet() {
    init {
        root {
            fontFamily = "Noto Sans CJK SC Regular"
        }
    }
}

class MyApp : App(MyView::class, MyStylesheet::class)

fun main(args: Array<String>) {
    launch<MyApp>(*args)
}