如何获取场景中节点的实际位置。绝对位置,无论任何容器/变换。
例如,我想翻译某个节点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中获得绝对最终的定位坐标?
答案 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-