import javafx.application.Application; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.input.*; import javafx.scene.layout.HBox; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Ellipse; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; import java.util.Collections; import java.util.List; public class SimpleDragApp extends Application { public static DragEvent lastDragOverEvent; public static final String TITLE1 = "DragEventTest"; public static final String TITLE2 = "SecondStage"; public static final String ID_CIRCLE = "Circle"; public static final String ID_ELLIPSE = "Ellipse"; public static final String ID_RECTANGLE = "Rectangle"; public static final String PARAM_TWO_STAGE = "TwoStage"; private Parent getContent() { HBox list = new HBox(); final Rectangle rect = new Rectangle(50, 50, Color.BLUE); rect.setId(ID_RECTANGLE); rect.setOnDragDetected(new EventHandler() { @Override public void handle(MouseEvent t) { Dragboard db = rect.startDragAndDrop(TransferMode.ANY); ClipboardContent content = new ClipboardContent(); content.putString("Hello World"); db.setContent(content); t.consume(); System.out.println("Drag detected"); System.out.format("SceneX = %.2f, SceneY = %.2f\n", t.getSceneX(), t.getSceneY()); System.out.format("ScreenX = %.2f, ScreenY = %.2f\n", t.getScreenX(), t.getScreenY()); } }); list.getChildren().addAll(rect); Rectangle target = new Rectangle(50, 50, Color.YELLOW); //target.setId(ID_ELLIPSE); //target.setFill(Color.BLUEVIOLET); target.setOnDragOver(new EventHandler() { @Override public void handle(DragEvent t) { lastDragOverEvent = t; t.acceptTransferModes(TransferMode.ANY); } }); target.setOnDragDropped(new EventHandler() { @Override public void handle(DragEvent t) { t.setDropCompleted(true); System.out.println("Drag dropped"); System.out.println("sceneX " + t.getSceneX() + ", sceneY " + t.getSceneY()); System.out.println("screenX " + t.getScreenX() + ", screenY " + t.getScreenY()); System.out.println("X " + t.getX() + ", Y " + t.getY()); System.out.println("Last drag over event"); System.out.println("sceneX " + lastDragOverEvent.getSceneX() + ", sceneY " + lastDragOverEvent.getSceneY()); System.out.println("screenX " + lastDragOverEvent.getScreenX() + ", screenY " + lastDragOverEvent.getScreenY()); System.out.println("X " + lastDragOverEvent.getX() + ", Y " + lastDragOverEvent.getY()); } }); list.getChildren().add(target); return list; } public void start(Stage stage) { stage.setX(100); stage.setY(100); stage.setWidth(200); stage.setHeight(200); stage.setTitle(TITLE1); Scene scene = new Scene(getContent(), 400, 400); stage.setScene(scene); stage.show(); Parameters params = getParameters(); List parameters; parameters = params == null ? Collections.emptyList() : params.getRaw(); if (parameters.size() > 0 && PARAM_TWO_STAGE.equals(parameters.get(0))) { Stage stage2 = new Stage(); stage2.setTitle(TITLE2); stage2.setScene(new Scene(new Group(getContent2()))); stage2.show(); } } public static void main(String[] args) { launch(args); } private Node getContent2() { Group list = new Group(); Circle circle = new Circle(150, 50, 25, Color.RED); circle.setId(ID_CIRCLE); circle.setOnDragOver(new EventHandler() { @Override public void handle(DragEvent t) { lastDragOverEvent = t; t.acceptTransferModes(TransferMode.ANY); } }); circle.setOnDragDropped(new EventHandler() { @Override public void handle(DragEvent t) { t.setDropCompleted(true); } }); list.getChildren().add(circle); return list; } }