【发布时间】:2016-03-15 10:05:04
【问题描述】:
我是 java 和 javafx 的新手。如何检查堆栈窗格或场景中是否存在像 Rectangle 或 Button 这样的对象?尝试在 google 中搜索,但找不到与此相关的任何内容。
【问题讨论】:
-
提供一些代码,向我们展示你到目前为止所做的尝试。 . .
我是 java 和 javafx 的新手。如何检查堆栈窗格或场景中是否存在像 Rectangle 或 Button 这样的对象?尝试在 google 中搜索,但找不到与此相关的任何内容。
【问题讨论】:
要检查 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。
【讨论】:
在我看来,您似乎也在寻找一种方法来检查某个 Node 是否是另一个 Node 或 Scene 的直接或间接孩子。
遵循一种检查某个Node 是否是另一个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 是Scene 的根还是间接子代,我们可以使用类似的方法。此方法遍历节点的父链直到节点的根,然后将节点的根与场景的根进行比较(如果所讨论的节点是场景的一部分,则为真):
public static boolean isChildOf(Node nodeInQuestion, Scene sceneInQuestion) {
Node rootOfNode = nodeInQuestion;
while (rootOfNode.getParent() != null) {
rootOfNode = rootOfNode.getParent();
}
return sceneInQuestion.getRoot() == rootOfNode;
}
【讨论】: