I've been trying to move an undecorated stage around the screen, by using the following mouse listeners:
These events are from a rectangle. My idea is to move the undecorated window clicking on the rectangle and dragging all the window.
@FXML protected void onRectanglePressed(MouseEvent event) { X = primaryStage.getX() - event.getScreenX(); Y = primaryStage.getY() - event.getScreenY(); } @FXML protected void onRectangleReleased(MouseEvent event) { primaryStage.setX(event.getScreenX()); primaryStage.setY(event.getScreenY()); } @FXML protected void onRectangleDragged(MouseEvent event) { primaryStage.setX(event.getScreenX() + X); primaryStage.setY(event.getScreenY() + Y); }
All that I've got with these events is when I press the rectangle and start to drag the window, it moves a little bit. But, when I release the button, the window is moved to where the rectangle is.
Thanks in advance.
I created a sample of an animated clock in an undecorated window which you can drag around.
Relevant code from the sample is:
// allow the clock background to be used to drag the clock around.
final Delta dragDelta = new Delta();
layout.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
// record a delta distance for the drag and drop operation.
dragDelta.x = stage.getX() - mouseEvent.getScreenX();
dragDelta.y = stage.getY() - mouseEvent.getScreenY();
}
});
layout.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override public void handle(MouseEvent mouseEvent) {
stage.setX(mouseEvent.getScreenX() + dragDelta.x);
stage.setY(mouseEvent.getScreenY() + dragDelta.y);
}
});
...
// records relative x and y co-ordinates.
class Delta { double x, y; }
Code looks pretty similar to yours, so not quite sure why your code is not working for you.