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
答案 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 是将组件样式与其逻辑分离的好方法,如果您之前创建过网页,它会感觉非常熟悉并且非常容易上手。