javafx检查场景中是否存在对象

时间:2016-03-15 10:05:04

标签: java javafx

我是java和javafx的新手。如何检查堆栈窗格或场景中是否存在Rectangle或Button等对象?尝试在谷歌搜索,但无法找到与此相关的任何内容。

2 个答案:

答案 0 :(得分:3)

要检查Node(可能是ButtonRectangle还是任何其他UI节点)是否是其他节点的直接子节点(父级假设,StackPane问题)您可以执行以下操作:

stackPane = ...
if (stackPane.getChildren().contains(node)) {
    // node is a direct child of stackPane
}

或者,您可以调用node.getParent()以获取对父节点的引用(如果有)。

最后,通过调用node.getScene() != null,您可以检查节点是否属于场景。

有关完整文档,请参阅JavaFX API

答案 1 :(得分:1)

在我看来,您也在寻找一种方法来检查某个Node是另一个Node还是{{3}的直接或间接子代 }。


遵循一种检查某个Scene是另一个Node的直接还是间接子级的方法。为此,它将遍历父级,祖父母等,并检查是否遇到有问题的父级:

public static boolean isChildOf(Node nodeInQuestion, Node parentInQuestion) {
    Node cur = nodeInQuestion.getParent();
    while (cur != null) {
        if (cur == parentInQuestion) {
            return true;
        }
        cur = cur.getParent();
    }
    return false;
}

要检查给定的NodeNode的根还是间接子级,我们可以使用类似的方法。此方法遍历节点的父链直到节点的根,然后将节点的根与场景的根进行比较(如果所涉及的节点是场景的一部分,则为true)

public static boolean isChildOf(Node nodeInQuestion, Scene sceneInQuestion) {
    Node rootOfNode = nodeInQuestion;
    while (rootOfNode.getParent() != null) {
        rootOfNode = rootOfNode.getParent();
    }
    return sceneInQuestion.getRoot() == rootOfNode;
}