Задать вопрос
@svetlov97

Почему окно дергается при перетаскивании?

Проблема заключается в том что окно трясет при перетаскивании и оно отклоняется от курсора. Почему это может быть?
Вот код:
package youpackagename;

import java.awt.Color;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Rectangle2D;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

/**
 *
 * @author keeptoo
 */
public class JavaFXMovable extends Application {

   //define your offsets here
    private double xOffset = 0;
    private double yOffset = 0;
    
    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
        //you can use underdecorated or transparent.
        stage.initStyle(StageStyle.TRANSPARENT);
        //stage.initStyle(StageStyle.UNDERDECORATED);
       
       //grab your root here
             root.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                xOffset = event.getSceneX();
                yOffset = event.getSceneY();
            }
        });
        
        //move around here
        root.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                stage.setX(event.getScreenX() - xOffset);
                stage.setY(event.getScreenY() - yOffset);
            }
        });
       
        Scene scene = new Scene(root);
        stage.setScene(scene);   

        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}
  • Вопрос задан
  • 351 просмотр
Подписаться 1 Средний 5 комментариев
Решения вопроса 1
@Codebaker
Всё умею, всё могу!
Продублирую ответ из комментариев.

Попробуйте так: в первом хендлере:
xOffset = stage.getX() - event.getScreenX();
yOffset = stage.getY() - event.getScreenY();


А в setOnMouseDragged:
stage.setX(event.getScreenX() + xOffset);
stage.setY(event.getScreenY() + yOffset);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы