【问题标题】:javafx Check if an object exists in scenejavafx 检查场景中是否存在对象
【发布时间】:2016-03-15 10:05:04
【问题描述】:

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

【问题讨论】:

  • 提供一些代码,向我们展示你到目前为止所做的尝试。 . .

标签: java javafx


【解决方案1】:

要检查 Node(可能是 ButtonRectangle 或任何其他 UI 节点)是否是另一个节点的直接子节点(假定为父节点,您的问题中为 StackPane),您可以执行以下操作:

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

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

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

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

【讨论】:

    【解决方案2】:

    在我看来,您似乎也在寻找一种方法来检查某个 Node 是否是另一个 NodeScene直接或间接孩子


    遵循一种检查某个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;
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 2013-09-26
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多