我正在寻找一种计算父节点中深子节点位置的方法。以下代码是我的第一个草稿,它无法正常工作。它通过递归地从目标节点处理节点树直到找到匹配的父节点来总结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
创建一个可视连接。
答案 0 :(得分:0)
只有突发奇想我才发现问题。我的自定义节点扩展了布局容器,如HBox
或VBox
。它们作为自定义类包含在节点树中两次,然后作为容器类。通过过滤自定义节点,现在位置已经开启。
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 );
}