在JavaFX中获取节点的真实位置

Posted

技术标签:

【中文标题】在JavaFX中获取节点的真实位置【英文标题】:Get real position of a node in JavaFX 【发布时间】:2015-09-17 20:45:27 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

这在一定程度上取决于您所说的“绝对”是什么意思。节点有一个坐标系,其父级有一个坐标系,其父级有一个坐标系,依此类推,最终有一个坐标系用于Scene 和一个用于屏幕(可能是物理显示设备的集合) )。

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

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

或相对于屏幕的坐标:

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

在任何一种情况下,生成的 Bounds 对象都有 getMinX()getMinY()getMaxX()getMaxY()getWidth()getHeight() 方法。

【讨论】:

出于好奇,您知道他们为什么不创建 getCenterX() 和 getCenterY() 方法吗? @Roland 不,不是真的,但是在过度指定 API 和提供足够的功能之间总是存在平衡。我的猜测(这是一个猜测)是边界最重要的用例是布局,我可以想象minXminYwidthheight 将是该用例中最重要的属性, maxXmaxY 次之。 centerXcenterY 可能没有足够的理由从其他人中计算它们已经足够容易了。 @James_D ...它有时不起作用!为什么?我真的不明白! @maryam 什么时候不起作用?当它不起作用时会发生什么?您可能应该发布一个新问题,其中包含一个完整、简单的示例,表明它未能达到您的预期。你明白它是如何工作的吗?如果没有,您是否阅读了相关类和方法的 API 文档? @Roland JavaFX11 添加了getCenterX() 等方法。【参考方案2】:

假设主舞台“窗口”的名称,以及节点“菜单”的名称,您可以这样做:-)

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

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于在JavaFX中获取节点的真实位置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaFX 中获取鼠标的位置?

JavaFX 获取窗格的首选大小

Javafx:TableView根据行列获取特定表格单元格的图形节点

七.获取真实的DOM节点

动画时如何在视图中获取 UIImageView 的真实位置?

如何在opencv中获取真实位置的图像像素?