1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| private void enableDragging(Node node) {
final ObjectProperty<Point2D> mouseAnchor = new SimpleObjectProperty<>();
final ObjectProperty<Point2D> mouseDown = new SimpleObjectProperty<>();
// Lorsque la pi�ce est saisie, on pr�serve la position de d�part
node.setOnMousePressed(event -> {
mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY()));
mouseDown.set(new Point2D(event.getSceneX(), event.getSceneY()));
});
// � chaque �v�nement de d�placement, on d�place la pi�ce et on met �
// jour la position de d�part
node.setOnMouseDragged(event -> {
double deltaX = event.getSceneX() - mouseAnchor.get().getX();
double deltaY = event.getSceneY() - mouseAnchor.get().getY();
node.relocate(node.getLayoutX() + deltaX, node.getLayoutY() + deltaY);
node.toFront();
mouseAnchor.set(new Point2D(event.getSceneX(), event.getSceneY()));
});
// Lorsqu'on rel�che la pi�ce, le mouvement correspondant est appliqu�
// au jeu d'�checs si possible.
// L'image de la pi�ce est �galement centr�e sur la case la plus proche.
node.setOnMouseReleased(event -> {
Point2D to = new Point2D (event.getSceneX(), event.getSceneY());
Point2D from = mouseDown.get();
if(board.move(from, to)) {
node.relocate(to.getX(), to.getY());
}else {
node.relocate(from.getX(), from.getY());
}
});
} |
Partager