【问题标题】:JavaFX 8.0 - How can I get a MouseEventHandle at title barJavaFX 8.0 - 如何在标题栏获得 MouseEventHandle
【发布时间】:2015-11-08 14:16:17
【问题描述】:

我已经实现了一个 EventHandler 来获取鼠标的窗口拖动:

public void mouseEventHandler(){
    final Delta dragDelta = new Delta();
    view.getScene().setOnMousePressed(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent mouseEvent) {
            dragDelta.x = mainStage.getX() - mouseEvent.getScreenX();
            dragDelta.y = mainStage.getY() - mouseEvent.getScreenY();
        }
    });
    view.getScene().setOnMouseDragged(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent mouseEvent) {
            mainStage.setX(mouseEvent.getScreenX() + dragDelta.x);
            mainStage.setY(mouseEvent.getScreenY() + dragDelta.y);
            stage.setX(mainStage.getX());
            stage.setY(mainStage.getY() + view.getScene().getHeight() + 25);
        }
    });
}

我有两个stage:mainStage和一个stage,它沉迷于mainStage的坐标。我的问题是,只有在我单击 mainStage 的窗口并拖动它时,舞台才会移动。但是如果我单击要删除的窗口的标题栏,它不会移动。 如何获取标题栏的 MouseEvent?

这里是show()方法,所以你可以理解成瘾:

public void show(Stage mainStage, MenuPresenter menuPresenter){
    this.model = new Model();
    this.view = new GameView(this.model);
    this.chatWatchView = new ChatWatchView();
    this.score = this.model.getScore();
    this.menuPresenter = menuPresenter;
    this.mainStage = mainStage;
    mainStage.setScene(view.getScene());
    mainStage.centerOnScreen();
    stage = new Stage();
    stage.setScene(chatWatchView.getScene());
    stage.initStyle(StageStyle.UNDECORATED);
    stage.setX(mainStage.getX());
    stage.setY(mainStage.getY() + view.getScene().getHeight() + 25);
    stage.show();
    mainStage.show();

    startTimeline();
    activateEventHandler();
    mouseEventHandler();
    //view.setScore("Score: " + model.getScore());
}

【问题讨论】:

    标签: mouseevent javafx-8 mouselistener


    【解决方案1】:

    有类似的问题。考虑给你的Stage的xProperty()yProperty()添加监听器,我觉得效果会更好。
    就我而言,我最终得到了这样的结果

    void updatePosition(double stageX, double stageY) {
        //...
    }
    

    然后

    stage.xProperty().addListener(((observable, oldValue, newValue) -> {
            updatePosition(newValue, stage.getY())   
    }));
    stage.yProperty().addListener(((observable, oldValue, newValue) -> {
            updatePosition(stage.getX(), newValue)   
    }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      相关资源
      最近更新 更多