【发布时间】:2017-06-13 14:53:49
【问题描述】:
我们有一个 java fx 8 应用程序,它在运行时根据收到的环境事件逐步创建窗格。当它们被创建时,这些窗格随后被添加为其他窗格的子窗格,这些窗格都构成了整个场景的一部分。所有这一切都很好,当显示在屏幕上时,所有窗格都已创建,并且可以看到随着事件的出现出现在屏幕上,并且可以看到它们的位置正在调整,因为在它们周围创建和添加了其他窗格等。
然而,当给定其他外部环境事件时,我们希望在两个已创建的窗格(在运行时创建的窗格)之间显示消息转换时会出现问题。为此,我们使用以下示例代码的 sn-p 获取两个窗格中每个窗格的中心 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.
我们遇到的问题是,几乎所有时间,调用窗格的.localToScene() 返回的Point2D 坐标不一定是当前显示在屏幕上的坐标。就好像返回的坐标是第一次添加窗格时的初始坐标,但是在创建和添加其他窗格之前(从而调整窗格的场景坐标)。
我们尝试在计算 scenePoint1 和 scenePoint2 之前强制调用 .requestLayout() 和 .layout(),但返回的坐标几乎总是过时的。
为了获取节点相对于场景的当前 x,y 坐标,我们是否做错了什么?
【问题讨论】:
-
这可能很棘手,但是否可以为此创建一个minimal reproducible example?
标签: javafx-8