Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 为什么样式类存储在列表而不是集合中?_Css_Javafx - Fatal编程技术网

Css 为什么样式类存储在列表而不是集合中?

Css 为什么样式类存储在列表而不是集合中?,css,javafx,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 M

我最近在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文件中的最后一个,即。E“bg-color-2”

问题

为什么使用列表而不是集合?

这是css标准。 根对象包含这两个样式类

Css解析器或Render或IDK(评估Css的东西)从上到下读取Css文件

这意味着它将背景颜色更改为红色,而不是绿色


因此,如果从根目录中删除'bg-color-2',它将是红色的,否则它将是绿色的。

我实际上发现这是一个真正的问题:几乎每次将类添加到样式类列表中时,都会通过检查
if(!styleClasses.contains(…)
的形式将代码弄乱;一套会更方便(而且性能更好)。也许在某些用例中,在列表中多次使用同一个类是可取的,但我不知道这可能是什么……没有按照添加顺序应用样式对我来说就像一个bug。你可以归档,我不确定。这和html处理它的方式是一样的。困扰我的是詹姆斯·迪德提到的事情。在添加新样式类之前,始终必须先进行检查。错误在于使用列表而不是集合。除非有什么原因。试着问一下,你可能会得到一个规范的答案。我按照建议询问了openjfx开发人员邮件列表。有兴趣的人可以阅读答案。