JavaFX的:字体后无法设置字体大小以编程方式被设置CSS(JavaFX: Cannot set

2019-06-28 01:16发布

我已经存储了我在我申请使用的代码CSS文件应用程序的默认字体类型和大小:

label.getStyleClass().add("labelStyleClass");

不过,我也补充说,如果用户提供了自己的喜好,它应该覆盖默认设置(设置如上),并使用用户提供的字体大小的功能:

double userSize = readFromFile;
label.setFont(new Font(userSize));

在这种情况下, label.setFont()调用不设置由用户提供的新的大小。 当我注释掉初始CSS代码,后来的作品。

任何解决方法吗?

注:跨张贴在JavaFX的论坛

Answer 1:

这是由设计。 建筑方面的原因覆盖对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();
}


文章来源: JavaFX: Cannot set font size programmatically after font being set by CSS