css - JavaFX 自定义字体

标签 css javafx fonts font-face

如何为 JavaFX(Java 17、OpenJFX)设置自定义字体?我尝试将文件复制到 resources/fonts 文件夹并通过 CSS 中的 @font-face 导入它们。它不起作用。还尝试了@import - 没有用。

最佳答案

在互联网上搜索了几个小时后,终于解决了如何在 JavaFX 中设置自定义字体并在 CSS 中舒适地使用它。

CSS 文件如下所示:

@font-face
{
    -fx-font-family: "Quicksand Light";
    src: url("../fonts/Quicksand-Light.ttf");
}


@font-face
{
    -fx-font-family: "Quicksand Regular";
    src: url("../fonts/Quicksand-Regular.ttf");
}

@font-face
{
    -fx-font-family: "Quicksand Medium";
    src: url("../fonts/Quicksand-Medium.ttf");
}

@font-face
{
    -fx-font-family: "Quicksand Semi-bold";
    src: url("../fonts/Quicksand-SemiBold.ttf");
}

@font-face
{
    -fx-font-family: "Quicksand Bold";
    src: url("../fonts/Quicksand-Bold.ttf");
}

.light
{
    -fx-font-family: "Quicksand Light";
}

.regular
{
    -fx-font-family: "Quicksand Regular";
}

.medium
{
    -fx-font-family: "Quicksand Medium";
}

.semi
{
    -fx-font-family: "Quicksand Semi-bold";
}

.bold
{
    -fx-font-family: "Quicksand Bold";
}

现在,在您的 java 类中,您可以相应地设置样式,如下所示:

    Label lblThin = new Label("Light");
    lblThin.getStyleClass().add("light");

    Label lblRegular = new Label("Regular");
    lblRegular.getStyleClass().add("regular");

    Label lblMedium = new Label("Medium");
    lblMedium.getStyleClass().add("medium");

    Label lblSemiBold = new Label("Semi Bold");
    lblSemiBold.getStyleClass().add("semi");

    Label lblBold = new Label("Bold");
    lblBold.getStyleClass().add("bold");

需要注意的两个主要事项:

  1. 字体名称应与字体文件完全相同,并且是 double 的 引用
  2. 字体的原始文件名应保留在 你的资源

附上资源/字体照片以方便理解:

enter image description here

输出:

enter image description here

我希望这可以节省某人的时间。

关于css - JavaFX 自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70985044/

相关文章:

java - 我可以在 TableView 中使用 CheckBoxTableCell 作为让用户选择多行的方法吗?

java - javaFX中的JFXSlider NullPointerException

css - Webpack 导入包括具有相对路径的字体

javascript - 如何创建像 jsfiddle 这样的所见即所得

javascript - CSS 没有在 Android 手机上显示?

java - Jar 找不到 .fxml 文件的路径

html - HTML 中单词之间的多个空格没有

ios - 将外部字体导入 iPhone 应用程序

html - 更改material-ui对话框显示的动画

javascript - 如何以 0 秒启动 setInterval 函数但在给定时间内重复它?