【问题标题】:JavaFX: Cannot set font size programmatically after font being set by CSSJavaFX:CSS设置字体后无法以编程方式设置字体大小
【发布时间】:2023-03-07 18:40:01
【问题描述】:

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

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

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

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

在这种情况下,label.setFont() 调用不会设置用户给定的新大小。当我注释掉最初的 CSS 代码时,后面的代码就可以了。

有什么解决方法吗?

注意:交叉发布于JavaFX forum

【问题讨论】:

    标签: css font-face javafx javafx-2


    【解决方案1】:

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

    默认 caspian.css Scene css Parent css setStyle()

    这是来自css reference guide的引用:

    JavaFX CSS 实现应用以下优先顺序;来自用户代理样式表的样式的优先级低于从代码中设置的值,后者的优先级低于场景或父样式表。内联样式具有最高优先级。来自 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();
    }
    

    【讨论】:

    • 感谢这工作!最初我试图覆盖 -fx-font: 14 "arial";使用 setStyle(-fx-font-size: 28;) 不起作用。但是当我将字体大小和样式放在单独的行中时,例如 -fx-font-family: serif; -fx字体大小:14;在 css 中并尝试通过 setStyle(-fx-font-size: 28;) 覆盖它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 2016-02-01
    • 2013-01-20
    • 2010-11-21
    相关资源
    最近更新 更多