我有一些行TableView
。用户可以选择任何行,但当他点击空行或Stage
上的任何位置时,我想清除他当前对TableView
的选择。
答案 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();
}
}
}
});