JavaFX:在CSS设置字体后,无法以编程方式设置字体大小

Nei*_*eil 5 css javafx font-face javafx-2

我已将我的应用程序的默认字体类型和大小存储在CSS文件中,我使用以下代码应用:

label.getStyleClass().add("labelStyleClass");
Run Code Online (Sandbox Code Playgroud)

但是我还添加了一个功能,如果用户提供自己的首选项,它应该覆盖默认设置(上面设置)并使用用户提供的字体大小:

double userSize = readFromFile;
label.setFont(new Font(userSize));
Run Code Online (Sandbox Code Playgroud)

在这种情况下,label.setFont()调用不会设置用户给出的新大小.当我注释掉最初的CSS代码时,后来的工作.

任何解决方法?

注意:在JavaFX论坛上交叉发布

Ser*_*nev 10

这是设计的.出于架构原因,css的覆盖链如下:

默认caspian.css <API设置<用户的Scenecss <用户的Parentcss <setStyle()

或者,引用css参考指南:

JavaFX CSS实现应用以下优先顺序; 来自用户代理样式表的样式的优先级低于从代码设置的值,该代码的优先级低于Scene或Parent样式表.内联样式具有最高优先级.来自Parent实例的样式表被认为比Scene样式表中的样式更具体.

因此,您可以通过使用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();
}
Run Code Online (Sandbox Code Playgroud)