我们有一个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()
之前尝试强制调用scenePoint1
和scenePoint2
,但返回的坐标几乎总是陈旧且过时。
为了获得节点相对于场景的当前x,y坐标,有什么我们做得不对的吗?
答案 0 :(得分:0)
问题与java fx相关的任何事情都没有关系。
如果我们从一个定制的地图中获取Panes,那么我们的编码错误是错误的。