为什么样式类存储在List而不是Set中?

时间:2015-05-20 02:34:31

标签: css javafx

我最近在JavaFX中使用CSS,并注意到我在节点的样式列表中多次使用相同的样式。

由于样式的顺序是由css文件中的顺序定义的,而不是由节点的getStyleClass()返回的列表顺序定义的,我想知道是否有特殊原因。

示例:

application.css

.bg-color-1 {
    -fx-background-color:red; 
}
.bg-color-2 {
    -fx-background-color:green;
}

Main.java

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();

            root.getStyleClass().add( "bg-color-1");
            root.getStyleClass().add( "bg-color-2");

            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

如果你写

并不重要
    root.getStyleClass().add( "bg-color-1");
    root.getStyleClass().add( "bg-color-2");

或将订单更改为

    root.getStyleClass().add( "bg-color-2");
    root.getStyleClass().add( "bg-color-1");

使用的样式将始终是css文件中的最后一个,i。即" BG-色-2"

问题

为什么使用List而不是Set?

1 个答案:

答案 0 :(得分:0)

这是一个CSS标准。 您的根对象包含两个样式类。

Css-Parser或Render或IDK(评估css的东西)从上到下读取CSS文件。

这意味着它将Backgroundcolor更改为红色而不是绿色。

所以如果你删除' bg-color-2'从根本上它会变红,否则它会变成绿色。