【问题标题】:Move undecorated stage on mouse drag通过鼠标拖动移动未装饰的舞台
【发布时间】:2015-12-05 06:39:01
【问题描述】:

我将舞台风格设置为

stage.initStyle(StageStyle.UNDECORATED);

但现在我希望能够移动舞台窗口。该怎么做?

【问题讨论】:

标签: java javafx


【解决方案1】:

假设root 是您的父节点,即您在创建Scene 时使用的那个。 xOffsetyOffsetdouble 类型变量。您可以使用以下代码实现拖动窗口:

    root.setOnMousePressed(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            xOffset = event.getSceneX();
            yOffset = event.getSceneY();
        }
    });

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

【讨论】:

【解决方案2】:

我明白

import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.input.MouseEvent;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application
 {

private double xOffset = 0;
private double yOffset = 0;
private static class Delta {
    double x, y;
}

final Delta dragDelta = new Delta();
final BooleanProperty inDrag = new SimpleBooleanProperty(false);

@Override  public void start(final Stage primaryStage) throws Exception{

    Parent root = FXMLLoader.load(getClass().getResource("Login.fxml"));
    primaryStage.initStyle(StageStyle.UNDECORATED);
    root.setOnMousePressed(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            dragDelta.x = primaryStage.getX() - event.getScreenX();
            dragDelta.y = primaryStage.getY() - event.getScreenY();
            xOffset = event.getSceneX();
            yOffset = event.getSceneY();
        }
    });

    root.setOnMouseDragged(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            primaryStage.setX(event.getScreenX() + dragDelta.x);
            primaryStage.setY(event.getScreenY() + dragDelta.y);
            primaryStage.getWidth();
            primaryStage.getHeight();
            primaryStage.getX();
            primaryStage.getY();
            inDrag.set(true);

        }
    });
    primaryStage.setTitle("Login");
    primaryStage.setResizable(false);
    primaryStage.setScene(new Scene(root));
    primaryStage.show();

}


public static void main(String[] args) {

    launch(args);
}

}

【讨论】:

    猜你喜欢
    • 2013-09-18
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2013-08-12
    相关资源
    最近更新 更多