单击javafx中的空行时,在表视图中清除选择

时间:2017-01-28 08:15:55

标签: javafx tableview

我有一些行TableView。用户可以选择任何行,但当他点击空行或Stage上的任何位置时,我想清除他当前对TableView的选择。

2 个答案:

答案 0 :(得分:3)

如果点击位于空行或{{1}之外的任何位置,您可以向使用<script src="https://unpkg.com/rxjs/bundles/Rx.min.js"></script>的选择模型的Scene添加事件过滤器以清除选择}:

TableView

答案 1 :(得分:2)

您可以存储最后选择的行,如果点击位于所选行或其他位置,则检查场景中的鼠标侦听器:

    ObjectProperty<TableRow<MyRowClass>> lastSelectedRow = new SimpleObjectProperty<>();

    myTableView.setRowFactory(tableView -> {
        TableRow<MyRowClass> row = new TableRow<MyRowClass>();

        row.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> {
            if (isNowSelected) {
                lastSelectedRow.set(row);
            } 
        });
        return row;
    });


    stage.getScene().addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {

        @Override
        public void handle(MouseEvent event) {
            if (lastSelectedRow.get() != null) {
                Bounds boundsOfSelectedRow = lastSelectedRow.get().localToScene(lastSelectedRow.get().getLayoutBounds());
                if (boundsOfSelectedRow.contains(event.getSceneX(), event.getSceneY()) == false) {
                    myTableView.getSelectionModel().clearSelection();
                }
            }
        }
    });