如何在JavaFX8上拦截TableView上的MouseEvent.MOUSE_CLICKED

时间:2016-05-23 13:51:07

标签: tableview javafx-8

我正在创建一个自定义CheckBoxTableView,其中所选项目与CheckBox一起显示。如果用户在选择项目后尝试对表格进行排序,则会出现问题。我想提示用户,看看他们是否愿意继续。如果是这样,我想清除选择,如果没有,只需消耗该事件,这样就不会发生排序。

不幸的是 - 我的EventFilter似乎在排序完成后开始。

在TableView构造函数中,我放置了以下代码:

addEventFilter(MouseEvent.MOUSE_CLICKED, event -> {
    if(event.getTarget() instanceof TableColumnHeader) {
        Alert a = new Alert(Alert.AlertType.CONFIRMATION);
        a.setContextText("you sure?");
        Optional<ButtonType> bt = a.showAndWait();
        if(bt.isPresent() && bt.get() == ButtonType.OK){
            //Clear selection
            getSelectionModel().clearSelection();
        }else {
            event.consume();
        }
    }
});

但是当我的EventFilter触发时,表已被排序。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

使用MouseEvent.MOUSE_PRESSED

MouseEvent.MOUSE_CLICKED之后

MouseEvent.MOUSE_RELEASED被解雇,为时太晚,无法拦截听众和听众:)