我正在努力实现一个游戏,你可以将你的数字从棋盘外拖到棋盘上。
董事会是滚动窗格的内容,与包含数字的窗格存在兄弟关系。
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
任何人都可以告诉我我需要改变什么,或者我想实现的目标是什么?
感谢您的回答。