如何使用CSS在JavaFX Scene Builder中设置自定义字体

3

我正在使用JavaFX Scene Builder制作GUI,并希望所有文本(标签、文本框、下拉框)都使用相同的字体。问题在于它是一种自定义字体,可能不会出现在每个客户端的计算机上。

我已经尝试了CSS:

@font-face {
   font-family: DIN;
   src: url(DIN.tff);
}

.text {
   -fx-font-family: DIN;
   -fx-font-style: bold;
}

将上述代码保存到文件Font.css中,并尝试通过Scene Builder的JavaFX CSS字段应用于每个GUI元素,但它无效。
我在CSS中犯了错误吗?还是有更好的方法?如果不必要,我宁愿不在Java代码本身中为每个元素加载并设置字体。

可能是重复的问题:如何在JavaFx 2.2中嵌入.ttf字体? - jewelsea
2
这很相似。但是对于那些在Scene Builder中专门使用CSS的人来说,我们还是保留这个选项。我认为这是一种比通过Java代码本身添加字体更方便的方式。 - corpico
被接受的答案不是一样的吗?自定义字体仍需要Java代码吧? - jewelsea
被接受的答案提供了与您链接相同的Java代码,但并非必需。可以使用“@font-face规则”在Scene Builder中完全使用CSS加载自定义字体。我接受了Steven Van Impe的答案,因为他揭示了使用@font-face需要在CSS中使用字体名称而不是字体文件名称,这解决了我的问题。其余部分是额外信息。 - corpico
1个回答

13

确保在应用程序启动时使用Font.loadFont来实际加载字体。然后您应该能够从CSS中使用该字体。注意使用字体的名称,而不是字体文件的名称。那是一个常见的错误。

我以前使用过以下方法来加载和使用自定义字体:

Font.loadFont(getClass().getResourceAsStream("/resources/fonts/marck.ttf"), 14);

并且:

-fx-font-family: "Marck Script";

顺便提一下:如果名称包含空格,则需要引号。


2
非常感谢!成功了!字体族必须与.ttf文件中的名称完全一致。 - corpico
4
快速提示:在加载字体时,请使用getName()检查名称,以便您可以精确地添加所需的名称。有时它不仅仅是字体名称。 - arturvt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接