20

是否可以在 JavaFX 应用程序中使用 CSS 指定字体?我有一个 FXML 场景和相应的 CSS 文件。在 Java 代码中,可以使用以下setFont方法指定字体:

text.setFont(Font.loadFont("file:resources/fonts/SourceSansPro-Bold.ttf", 12));

我尝试了不同的结构,例如:

-fx-font-family: url("../fonts/SourceSansPro-Bold.ttf");

但它不起作用。

4

6 回答 6

21

我使用应用程序代码和 CSS 的组合来通过外部字体设置样式。

我将loadFont调用放在重写的 Application init 方法中,以确保在应用程序发生任何事情之前调用它。

Font.loadFont(CustomFontTest.class.getResource("TRON.TTF").toExternalForm(), 10);

要使用字体,我在 CSS 中按字体系列引用字体:

.menu-bar {
    -fx-background-color: transparent;
    -fx-font-family: TRON;
    -fx-font-size: 40px;
}

.context-menu {
    -fx-font-family: TRON;
    -fx-background-color: transparent;
    -fx-font-size: 12px;
}

很高兴CSS可以很好地调整字体大小。即使以 10 号字体加载字体,字体也已正确调整为 CSS-fx-font-size规范中指定的大小。

通过 CSS 使用Font在应用程序初始化期间加载的标签的内联样式也可以正常工作:

Label testControl = new Label("TRON");
testControl.setStyle("-fx-font-family: TRON; -fx-font-size: 120;");

TRON 字体是从 dafont 下载的,放在与 CustomFontTest 类相同的目录中,并由构建系统复制到构建输出目录。

从我对“使用自定义字体”的论坛帖子的回答中复制的答案。

于 2012-08-29T15:56:59.087 回答
17

您已经接近解决方案:

-fx-font-family: 'Helvetica', Arial, sans-serif;

试试这个,它应该可以正常工作。


也许这会有所帮助?(我不是 JavaFX 专家)

https://forums.oracle.com/forums/thread.jspa?messageID=10107625


编辑

加载你的字体:

@font-face {
    font-family: Delicious;
    src: url('Delicious-Roman.otf');
}

使用你的字体-fx-

-fx-font-family: 'Delicious';
于 2012-08-29T08:09:03.083 回答
4

刚刚发现了一个细节:在 JavaFX-8 中,如果你想拥有相同字体的常规和粗体变体,你可以使用 @font-face 的两个实例来指定它们。然后你可以使用 -fx-font-weight: bold;

@font-face {
    font-family: 'Droid Sans';
    src: url('DroidSans.ttf');
}

@font-face {
    font-family: 'Droid Sans Bold';
    src: url('DroidSans-Bold.ttf');
}

.root {
    -fx-font-family: 'Droid Sans'; 
}

.table-row-cell:focused .text {
    -fx-font-weight: bold;
}
于 2015-04-08T06:42:29.753 回答
1

另一种方法是使用 FileIUnputStream 加载字体,因此您不需要使用 css:

 @FXML
    private Label myLabel;

@Override
    public void initialize(URL arg0, ResourceBundle arg1){

Font myFont = null;

        try {
            myFont = Font.loadFont(new FileInputStream(new File("patch_to_font.ttf")), 10);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        myLabel.setFont(myFont);

}
于 2016-02-11T09:41:27.147 回答
1

JavaFx CSS 字体(导入 .ttf):

/* import fonts */
@font-face {
    font-family: "Open Sans";
    font-style: normal;
    font-weight: 400;
    src: url("/fonts/OpenSans-Regular.ttf");
}
@font-face {
    font-family: "Open Sans Light";
    font-style: normal;
    font-weight: 300;
    src: url("/fonts/OpenSans-Light.ttf");
}
@font-face {
    font-family: "Open Sans Bold";
    font-style: normal;
    font-weight: 700;
    src: url("/fonts/OpenSans-Bold.ttf");
}
@font-face {
    font-family: "Open Sans ExtraBold";
    font-style: normal;
    font-weight: 900;
    src: url("/fonts/OpenSans-ExtraBold.ttf");
}

/* Set fonts */

.settings-name{
    -fx-font-size: 33px;
    -fx-font-family: "Open Sans Light";
    -fx-font-weight: 300;
    -fx-text-fill: #09f;
}

.settings-username{
    -fx-font-size: 19px;
    -fx-font-family: "Open Sans ExtraBold";
    -fx-font-weight: 900;
    -fx-text-fill: #09f;
}
于 2019-02-08T20:35:54.857 回答
0

您需要将Font.ttf文件放在我们的bin/<main application> folder中,其中包含.class您的应用程序示例

于 2021-07-12T15:16:03.480 回答