2015-11-08 52 views
1

我实现了一个事件处理它获取鼠标的窗口拖动得到MouseEventHandle:的JavaFX 8.0 - 我怎样才能在标题栏

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); 
     } 
    }); 
} 

我有两个阶段:主舞台和舞台,这是上瘾到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()); 
} 

回答

0

有类似的问题。考虑添加监听器到舞台的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) 
}));