在JavaFX中获取Node的全局坐标

时间:2009-10-07 13:07:45

标签: javafx

如何获取场景中节点的实际位置。绝对位置,无论任何容器/变换。

例如,我想翻译某个节点a,以便它暂时与另一个节点b重叠。所以我希望将translateX属性设置为b.globalX-a.globalX

文档说:

  

定义的X坐标   添加到的翻译   转换此节点的坐标   出于布局的目的。集装箱   或将执行布局的组   这个变量相对于   layoutBounds.minX为了定位   所需布局的节点   位置。

     

例如,如果孩子应该有   finalX的最终位置:

 child.layoutX = finalX - child.layoutBounds.minX;

也就是说,任何节点的最终坐标都应该是

finalX = node.layoutX + node.layoutBounds.minX

但是运行以下代码:

var rect;
Stage {
    title: "Application title"
    width: 250
    height:250
    scene: Scene {
        content: [
            Stack{content:[rect = Rectangle { width:10 height:10}] layoutX:10}
        ]
    }
}

println("finalX = {rect.layoutX+rect.layoutBounds.minX}");

为我提供了finalX = 0.0而不是finalX = 10.0,因为这些文档看起来很明显。

有没有一种明确的方法可以在JavaFX中获得绝对最终的定位坐标?

3 个答案:

答案 0 :(得分:13)

对于界限:

bounds = rect.localToScene(rect.getBoundsInLocal());

为JavaFx 1和2工作。

答案 1 :(得分:3)

我到目前为止找到的唯一解决方案是

rect.localToScene(rect.layoutBounds.minX, rect.layoutBounds.minY) // a Point2D{x:Float y:Float} object

在我看来,这并不是“最好”的方法(请注意,此功能未受约束)。它仍适用于JavaFX 1.2。

答案 2 :(得分:2)

自JavaFX 8以来,还有其他方法将本地坐标转换为屏幕坐标。他们的名字以“localToScreen”

开头

您可以查看以下链接 http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Node.html#localToScreen-double-double-