父空间中的节点位置

时间:2015-01-18 15:38:38

标签: javafx

我正在寻找一种计算父节点中深子节点位置的方法。以下代码是我的第一个草稿,它无法正常工作。它通过递归地从目标节点处理节点树直到找到匹配的父节点来总结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创建一个可视连接。

1 个答案:

答案 0 :(得分:0)

只有突发奇想我才发现问题。我的自定义节点扩展了布局容器,如HBoxVBox。它们作为自定义类包含在节点树中两次,然后作为容器类。通过过滤自定义节点,现在位置已经开启。

     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 );
     }