获取 JavaFX 中节点的真实位置

Get real position of a node in JavaFX

在 JavaFX 中获取节点绝对位置的最佳方法是什么?

假设我们在窗格(Hbox、Stackpane 或任何其他窗格)中有一个节点,并且它本身可能有一个父节点。

我想获取该节点的绝对位置并在另一个窗格中使用它。

"absolute" 有点取决于您的意思。节点有一个坐标系,其父级有一个坐标系,其父级有一个坐标系,依此类推,最终 Scene 有一个坐标系,屏幕有一个坐标系(这可能是物理的集合显示设备)。

您可能想要相对于 Scene 的坐标,在这种情况下您可以这样做

Bounds boundsInScene = node.localToScene(node.getBoundsInLocal());

或者相对于屏幕的坐标:

Bounds boundsInScreen = node.localToScreen(node.getBoundsInLocal());

无论哪种情况,生成的 Bounds 对象都有 getMinX()getMinY()getMaxX()getMaxY()getWidth()getHeight() 方法。

假设主舞台的名称 "window" 和节点的名称 "menu" 你可以这样做:-)

double X=Main.window.getX()+menu.getLayoutX();
double Y=Main.window.getY()+menu.getLayoutY();

如果您想将本地坐标转换为场景坐标,您可以使用 localToScene 方法。

 Point2D point2D = node.localToScene(0,0);

例如,如果您想知道窗格的中心但在场景坐标中

Point2D point2D = pane.localToScene(pane.getWidth()/2,pane.getHeight()/2);