我想使用Node.lookupAll()
在programmtic查询中使用伪类,但这似乎会产生意想不到的结果。
我在网上搜索过,找不到任何建议Node.lookupAll()不支持psuedo类......
public class Foo extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
PseudoClass pseudoClass = PseudoClass.getPseudoClass("custom");
Label a = new Label();
a.getStyleClass().add("foo");
a.pseudoClassStateChanged(pseudoClass, false);
Label b = new Label();
b.getStyleClass().add("foo");
b.pseudoClassStateChanged(pseudoClass, true);
Label c = new Label();
c.getStyleClass().add("foo");
c.pseudoClassStateChanged(pseudoClass, true);
HBox box = new HBox(a, b, c);
primaryStage.setScene(new Scene(box));
System.out.println(box.lookupAll(":custom").size()); // expected 2
System.out.println(box.lookupAll(".foo:custom").size()); // expected 2
System.out.println(box.lookupAll(".foo").size()); // expected 3, got 3
System.out.println(box.lookupAll(":magichorse").size()); // expected 0 !!
}
}
输出
4
3
3
4
答案 0 :(得分:1)
这似乎是一个错误,或至少是无证件的功能。没有人说过,JDK团队接受了我的错误报告。
请参阅JDK-8185831
可以改为使用变通方法getPseudoClassStates().contains(...)
。