10

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

例如,我想翻译某个节点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 中的绝对最终定位坐标?

4

3 回答 3

13

对于界限:

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

为 JavaFx 1 和 2 工作。

于 2012-10-03T20:21:18.800 回答
3

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

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

在我看来,这似乎不是“最好”的方式(请注意,此功能未绑定)。它仍然适用于 JavaFX 1.2。

于 2009-10-07T13:26:32.383 回答
2

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

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

于 2014-07-10T14:09:53.970 回答