How to drag an undecorated window (stage) of JavaFX

javafx, javafx-2, javafx-8

Solution

Just change your setOnMousePressed method to this:

bp.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                xOffset = primaryStage.getX() - event.getScreenX();
                yOffset = primaryStage.getY() - event.getScreenY();
            }
        });

and your setOnMouseDragged to this:

bp.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                primaryStage.setX(event.getScreenX() + xOffset);
                primaryStage.setY(event.getScreenY() + yOffset);
            }
        });

Problem

I have this undecorated window: ``` public static void initStartPage(final Stage primaryStage) { final Stage startPage = new Stage(); startPage.initStyle(StageStyle.UNDECORATED); //startPage.initOwner(primaryStage); //startPage.toFront(); Scene scene = new Scene(agentsPanel(), 900, 500); startPage.setScene(scene); startPage.show(); } ``` I would like to know how I can make it a draggable undecorated window? I want to change its position when the user selects the window with the right mouse button and then move the mouse while keeping the mouse button pressed down. P.S. I tested this solution, but it's not working: ``` private static FlowPane flow; private static BorderPane bpi; public static void initStartPage(final Stage primaryStage) { final Stage startPage = new Stage(); startPage.initStyle(StageStyle.UNDECORATED); startPage.initOwner(primaryStage); //startPage.toFront(); Scene scene = new Scene(agentsPanel(primaryStage), 900, 500); startPage.setScene(scene); startPage.show(); } private static double xOffset = 0; private static double yOffset = 0; public static BorderPane agentsPanel(final Stage primaryStage) { BorderPane bp = new BorderPane(); bp.setPrefSize(900, 500); bp.setMaxSize(900, 500); HBox thb = new HBox(10); // Set spacing between each child into the HBox thb.setPadding(new Insets(15, 15, 15, 15)); HBox bhb = new HBox(10); // Set spacing between each child into the HBox bhb.setPadding(new Insets(15, 15, 15, 15)); bp.setTop(thb); bp.setBottom(bhb); bp.setCenter(navigationPanel()); bp.setOnMousePressed(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { xOffset = event.getSceneX(); yOffset = event.getSceneY(); } }); bp.setOnMouseDragged(new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { primaryStage.setX(event.getScreenX() - xOffset); primaryStage.setY(event.getScreenY() - yOffset); } }); return bp; } ```

Original source

Related problems