父节点位置 space

Node location in parent space

我正在寻找一种方法来计算父节点中深子节点的位置。以下代码是我的初稿,无法正常工作。它通过从目标节点递归地向上处理节点树直到找到匹配的父节点来总结 layout*Property 。但是计算出的位置总是不对。我错过了什么吗?

  public static Pair<DoubleBinding, DoubleBinding> getNodeLocationInParentSpace(
        Node node, Parent parent )
  {
     DoubleBinding x = node.layoutXProperty().add( 0 );
     DoubleBinding y = node.layoutYProperty().add( 0 );

     return getNodeLocationInParentSpace( node, parent, x, y );
  }

  public static Pair<DoubleBinding, DoubleBinding> getNodeLocationInParentSpace(
        Node node, Parent parent, DoubleBinding x, DoubleBinding y )
  {
     if( node == parent )
     {
        return new Pair<DoubleBinding, DoubleBinding>( x, y );
     }
     else
     {
        return getNodeLocationInParentSpace( node.getParent(), parent,
              x.add( node.layoutXProperty() ), 
              y.add( node.layoutYProperty() ) );
     }
  }

场景是我有一个包含可拖动节点的 Pane。我想用 Curve.

在这些节点之间创建视觉连接

心血来潮才发现问题所在。我的自定义节点扩展布局容器,如 HBoxVBox。它们作为自定义 class 两次包含在节点树中,然后作为容器 class。通过过滤掉自定义节点,位置现在是正确的。

     if( node instanceof Pane )
     {
        return getNodeLocationInParentSpace( node.getParent(), parent,
              x.add( node.layoutXProperty() ),
              y.add( node.layoutYProperty() ) );
     }
     else
     {
        return getNodeLocationInParentSpace( node.getParent(), parent, x, y );
     }