JavaFX 字体未正确呈现

时间:2021-06-08 19:15:04

标签: java javafx java-11 javafx-11


public class Main extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");

        Button btn = new Button();
        btn.setText("Hello");
        btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

在控制台上获取以下第一行:

35026:1978749] CoreText 注意:客户端请求名称“.SFNS-Regular”,它将获得 Times-Roman 而不是预期的字体。所有系统 UI 字体访问都应通过适当的 API,例如 CTFontCreateUIFontForLanguage() 或 +[NSFont systemFontOfSize:]。 2021-06-09 00:00:46.808 java[35026:1978749] CoreText 注意:在 CTFontLogSystemFontNameRequest 上设置断点进行调试。 2021-06-09 00:00:46.815 java[35026:1978749] CoreText 注意:客户端请求名称“.SFNS-Regular”,它将获得 Times-Roman 而不是预期的字体。所有系统 UI 字体访问都应通过适当的 API,例如 CTFontCreateUIFontForLanguage() 或 +[NSFont systemFontOfSize:]。 2021-06-09 00:00:46.982 java[35026:1978817] CoreText 注意:客户端请求名称“.SFNS-Regular”,它将获得 Times-Roman 而不是预期的字体。所有系统 UI 字体访问都应通过适当的 API 进行,例如 CTFontCreateUIFontForLanguage() 或 +[NSFont systemFontOfSize:]。

操作系统:macOS javafx-sdk-11.0.2 jdk 11

而不是 Hello 在按钮上获取以下文本 enter image description here

1 个答案:

答案 0 :(得分:1)

问题是您没有正确安装或配置字体:“.SFNS-Regular”,以便 JavaFx 可以知道它在哪里。我实际上不确定是不是因为字体没有正确安装/配置,但是....

为了解决这个问题,我必须添加:

* {
   -fx-font-family: 'serif'
}

在我的根 CSS 文件中。如果您没有使用 CSS 文件或使用内联样式,那么您仍然可以设置全局字体:

取而代之的是:

primaryStage.setScene(new Scene(root, 300, 250));

你可以这样做:

Scene scene = new Scene(root, 300, 250);
scene.getRoot().setStyle("-fx-font-family: 'serif'");
primaryStage.setScene(scene);

您可以阅读有关 JavaFX 字体 here 以及组件的其他 CSS 配置的更多信息。 Using CSS files 是将组件样式与其逻辑分离的好方法,如果您之前创建过网页,它会感觉非常熟悉并且非常容易上手。

相关问题