我是java和javafx的新手。如何检查堆栈窗格或场景中是否存在Rectangle或Button等对象?尝试在谷歌搜索,但无法找到与此相关的任何内容。
答案 0 :(得分:3)
要检查Node
(可能是Button
,Rectangle
还是任何其他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;
}
要检查给定的Node
是Node
的根还是间接子级,我们可以使用类似的方法。此方法遍历节点的父链直到节点的根,然后将节点的根与场景的根进行比较(如果所涉及的节点是场景的一部分,则为true)
public static boolean isChildOf(Node nodeInQuestion, Scene sceneInQuestion) {
Node rootOfNode = nodeInQuestion;
while (rootOfNode.getParent() != null) {
rootOfNode = rootOfNode.getParent();
}
return sceneInQuestion.getRoot() == rootOfNode;
}