Good day. Tell me what I'm doing wrong. I'm trying to write code that allows dragging objects with the mouse. Objects after movement and rotation are determined in their old places.

package application; import javafx.application.Application; import javafx.event.EventHandler; import javafx.geometry.Point2D; import javafx.stage.Stage; import javafx.scene.Cursor; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.input.MouseEvent; import javafx.scene.layout.Pane; import javafx.scene.shape.Circle; import javafx.scene.shape.Ellipse; import javafx.scene.shape.Rectangle; public class Main extends Application { Point2D offset; Node selected; @Override public void start(Stage primaryStage) { Pane root = new Pane(); Rectangle rect = new Rectangle(40, 20, 50, 100); rect.setRotate(90); Ellipse ellipse = new Ellipse(450, 450, 50, 25); ellipse.setRotate(45); Circle circle = new Circle(250, 250, 50); root.getChildren().addAll(rect, ellipse, circle); root.setOnMousePressed(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent e) { offset = new Point2D(e.getX(), e.getY()); e.consume(); } }); root.setOnMouseMoved(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent e) { for(Node node: root.getChildren()){ if(node.contains(e.getX(), e.getY())){ selected = node; root.setCursor(Cursor.HAND); break; }else{ selected = null; root.setCursor(Cursor.DEFAULT); } } e.consume(); } }); root.setOnMouseDragged(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent e) { if(selected != null){ selected.setTranslateX(e.getX() - offset.getX()); selected.setTranslateY(e.getY() - offset.getY()); } e.consume(); } }); Scene scene = new Scene(root,500,500); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } 
  • And how should the program behave? - arachnoden

0