JavaFX在拖动时更改节点的父节点

时间:2018-01-16 19:32:40

标签: java javafx drag-and-drop parent-child

我正在努力实现一个游戏,你可以将你的数字从棋盘外拖到棋盘上。

董事会是滚动窗格的内容,与包含数字的窗格存在兄弟关系。

boardPane和stackPane(需要切换的两个)都是类窗格的实例。

当我将其移动到另一个窗格时,我需要做的是将拖动的图形的父级从其父窗格切换到新窗格。

我无法在MousePressed事件上切换父项,因为该图将被放置在不可见的位置。

f.setOnMouseDragged(event -> {
                // if follower gets dragged from the stackPane onto the scrollPane, change its parent to boardPane
                if (stackPane.getChildren().contains(f) && sp.getBoundsInParent().contains(f.getBoundsInParent())) {
                    Bounds followerBoundsBoardPane = boardPane.sceneToLocal(f.getBoundsInParent());
                    stackPane.getChildren().remove(f);
                    f.setTranslateX(followerBoundsBoardPane.getMinX());
                    f.setTranslateY(followerBoundsBoardPane.getMinY());
                    boardPane.getChildren().add(f);
                }
                Point2D eventInParent = f.localToParent(event.getX(), event.getY());
                double relX = eventInParent.getX() - deltaX;
                double relY = eventInParent.getY() - deltaY;
                f.setTranslateX(eventInParent.getX() - deltaX);
                f.setTranslateY(eventInParent.getY() - deltaY);

                event.consume();
            });

这是我拖动数字(跟随者)的代码。

当我使用此代码时,父图形被正确更改,但在此之后我无法移动它。

当打印出dragevent中的位置时,我可以看到,事件在更改父级后停止触发,但OnMouseReleased事件不会触发。当我释放鼠标按钮时,它会激活。

也许这个“日志”有助于理解,我的意思是:

In OnMouseDragged Handler
eventInParent: 417,000000, 682,000000
relative:      398,000000, 661,000000

In OnMouseDragged Handler
eventInParent: 418,000000, 680,000000
relative:      399,000000, 659,000000

In OnMouseDragged Handler
eventInParent: 421,000000, 675,000000
relative:      402,000000, 654,000000

In OnMouseDragged Handler
eventInParent: 421,000000, 673,000000
relative:      402,000000, 652,000000

In OnMouseDragged Handler
eventInParent: 424,000000, 668,000000
relative:      405,000000, 647,000000

In OnMouseDragged Handler
eventInParent: 8799,250000, 9441,339844
relative:      8780,250000, 9420,339844

任何人都可以告诉我我需要改变什么,或者我想实现的目标是什么?

感谢您的回答。

0 个答案:

没有答案