java fx localToScene()Coords

时间:2017-06-13 14:53:49

标签: javafx-8

我们有一个java fx 8应用程序,它根据收到的环境事件在运行时逐步创建Panes。在创建它们时,这些窗格随后被添加为其他窗格的子窗口,这些窗格都构成整个场景的一部分。所有这一切都很有效,当在屏幕上显示时,所有窗格都会被创建,并且当事件进入时可以看到它们出现在屏幕上,并且可以看到它们的位置随着其他窗格的创建和添加而调整,等等。

然而,当给定其他外部环境事件时,我们想要显示在两个创建的窗格(在运行时创建的窗格)之间转换的消息时,会出现问题。为此,我们使用以下示例代码片段获取两个窗格中每个窗格的中心X,Y坐标:

Bounds localBounds1 = pane1.getBoundsInLocal();
Point2D localPoint1 = new Point2D(localBounds1.getWidth()/2, 
localBounds1.getHeight()/2);
Point2D scenePoint1 = pane1.localToScene(localPoint1);

Bounds localBounds2 = pane2.getBoundsInLocal();
Point2D localPoint2 = new Point2D(localBounds2.getWidth()/2, 
localBounds2.getHeight()/2);
Point2D scenePoint2 = pane2.localToScene(localPoint2);

// here after we create a PathTransition from scenePoint1 to scenePoint2 and play it to see a message move from one Pane to the other.

我们遇到的问题是,几乎所有时间,通过调用窗格Point2D返回的.localToScene()坐标不一定是当前显示在屏幕上的坐标。好像返回的坐标是Panes首次添加时的初始坐标,但是在其他创建并添加到其周围的Panes之前(从而调整了Pane的场景坐标)。

我们在计算.requestLayout().layout()之前尝试强制调用scenePoint1scenePoint2,但返回的坐标几乎总是陈旧且过时。

为了获得节点相对于场景的当前x,y坐标,有什么我们做得不对的吗?

1 个答案:

答案 0 :(得分:0)

问题与java fx相关的任何事情都没有关系。

如果我们从一个定制的地图中获取Panes,那么我们的编码错误是错误的。