场景构建器JavaFX中的setOnMousePressed和setOnMouseDragged vs @FXML事件处理程序

时间:2018-05-20 08:07:18

标签: javafx event-handling mouseevent scenebuilder

我试图通过在我的应用程序上拖动某个组件来拖动我的舞台。 它完美地运作如下:

miniTop.setOnMousePressed(e-> {
    xOffset = e.getSceneX();
    yOffset = e.getSceneY();
});
miniTop.setOnMouseDragged(e -> {
    stage = (Stage) ((Node)e.getSource()).getScene().getWindow();
    stage.setX(e.getScreenX() - xOffset);
    stage.setY(e.getScreenY() - yOffset);
});

但是当我这样做时...... nononon

@FXML
public void getOffset(MouseEvent e) {
    xOffset = e.getSceneX();
    yOffset = e.getSceneY();
}
@FXML
public void dragStage(MouseEvent e) {
    stage = (Stage) ((Node)e.getSource()).getScene().getWindow();
    stage.setX(e.getScreenX() - xOffset);
    stage.setY(e.getScreenY() - yOffset);
}

这些事件处理程序链接到:

scene builder event handling 我尝试用dragStage方法包含Platform.runLater()方法,因为它通过移动舞台来改变用户界面,但这没有帮助......

.setOnMouse和Scene Builder事件处理程序之间有什么区别?

编辑: 30分钟后再次运行后,它开始工作了吗?什么? (当你认为自己犯了错误时,你很难学到哈哈)

1 个答案:

答案 0 :(得分:0)

应该没有区别,FXML事件处理程序可用的文档只链接到:javafx.beans.property.ObjectProperty<javafx.event.EventHandler<javafx.event.ActionEvent>> onAction

here

这表明它们以相同的方式实施。你可以检查你的FXML文件中事件处理程序是否正确分配给你期望的元素?