在javaFX中获取节点的实际位置

mar*_*yam 10 java javafx javafx-2 javafx-8

在JavaFX中获取节点绝对位置的最佳方法是什么?假设我们在一个窗格(Hbox,Stackpane,......或任何其他窗格)中有一个节点,并且可能有父节点.我想获得该节点的绝对位置并在另一个窗格中使用它?

Jam*_*s_D 35

这取决于你的"绝对"的意思.节点有一个坐标系,它的父坐标系,父节点坐标系等等,最后是Scene屏幕的坐标系和屏幕的坐标系(可能是物理显示设备的集合).

你可能要么相对于坐标Scene,在这种情况下你可以做

Bounds boundsInScene = node.localToScene(node.getBoundsInLocal());
Run Code Online (Sandbox Code Playgroud)

或相对于屏幕的坐标:

Bounds boundsInScreen = node.localToScreen(node.getBoundsInLocal());
Run Code Online (Sandbox Code Playgroud)

在任一种情况下,所得Bounds物体具有getMinX(),getMinY(),getMaxX(),getMaxY(),getWidth()getHeight()方法.

  • @Roland不,不是真的,但在过度指定API和提供足够的功能之间总是存在平衡.我的猜测(这是一个猜测)是边界最重要的用例是布局,我可以想象`minX`,`minY`,`width`和`height`将是该用例中最重要的属性,`maxX`和`maxY`是下一个最有用的.`centerX`和`centerY`可能没有足够的理由,因为它已经足够容易从其他人计算它们. (2认同)
  • @Roland JavaFX11 添加了 `getCenterX()` 等方法。 (2认同)