在JavaFX中使用包含伪类的查询

时间:2017-07-20 06:58:25

标签: javafx javafx-8

我想使用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

1 个答案:

答案 0 :(得分:1)

这似乎是一个错误,或至少是无证件的功能。没有人说过,JDK团队接受了我的错误报告。

请参阅JDK-8185831

可以改为使用变通方法getPseudoClassStates().contains(...)