我已经存储了我在我申请使用的代码CSS文件应用程序的默认字体类型和大小:
label.getStyleClass().add("labelStyleClass");
不过,我也补充说,如果用户提供了自己的喜好,它应该覆盖默认设置(设置如上),并使用用户提供的字体大小的功能:
double userSize = readFromFile;
label.setFont(new Font(userSize));
在这种情况下, label.setFont()
调用不设置由用户提供的新的大小。 当我注释掉初始CSS代码,后来的作品。
任何解决方法吗?
注:跨张贴在JavaFX的论坛
这是由设计。 建筑方面的原因覆盖对CSS的链条如下:
默认caspian.css <API设置<用户的Scene
的CSS <用户的Parent
CSS < setStyle()
或者,引用CSS参考指南 :
JavaFX的CSS实现应用的优先顺序如下; 从用户代理样式表的样式具有较低的优先级比来自代码设定的值,其具有较低的优先级比场景或父样式表。 内嵌样式具有最高的优先级。 从父实例样式表被认为是比从场景样式表的风格更加具体。
这样,就可以实现用你的目标setStyle()
而不是API调用。 试着运行下面的例子:
public void start(Stage stage) {
VBox root = new VBox(10);
Scene scene = new Scene(root, 300, 250);
// font.css: .labelStyleClass { -fx-font-size: 20 }
scene.getStylesheets().add(getClass().getResource("font.css").toExternalForm());
root.getChildren().add(LabelBuilder.create().text("default").build());
root.getChildren().add(LabelBuilder.create().text("font-css").styleClass("labelStyleClass").build());
Label lblApi = LabelBuilder.create().text("font-css-api (doesn't work)").styleClass("labelStyleClass").build();
lblApi.setFont(Font.font(lblApi.getFont().getFamily(), 40));
root.getChildren().add(lblApi);
Label lblStyle = LabelBuilder.create().text("font-css-setstyle (work)").styleClass("labelStyleClass").build();
lblStyle.setStyle("-fx-font-size:40;");
root.getChildren().add(lblStyle);
stage.setTitle("Hello World!");
stage.setScene(scene);
stage.show();
}