Css 为什么样式类存储在列表而不是集合中?
我最近在JavaFX中玩弄CSS,注意到我在节点的样式列表中多次获得相同的样式 由于样式的顺序是由css文件中的顺序定义的,而不是由节点的getStyleClass()返回的列表的顺序定义的,所以我想知道是否有特殊原因 例如: application.cssCss 为什么样式类存储在列表而不是集合中?,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
.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开发人员邮件列表。有兴趣的人可以阅读答案。