我有一个使用SelectionMode.MULTIPLE的表视图:
table.setEditable(true);
table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
table.getSelectionModel().selectedItemProperty().addListener(
(observable, oldValue, newValue) -> {
table.getSelectionModel().getSelectedItems().forEach(System.out::println);
});
选择行有效,但如果再次取消选择一行(通过单击ctrl +左键单击),则侦听器不会立即对此作出反应。我要取消选择行的方法如下:
答案 0 :(得分:4)
根据javadocs,多选项模式中的selectedItem
属性是指最后选择的项目:
选择时最常用的是所选项目属性 model设置为单选,但同样适用于 多选模式。在此模式下,所选项目将 始终代表最后的选择。
在您的方案中,如果您按顺序选择“Rob”,“Peter”,“Max”和“John”,则所选项目最终将作为最后一个人选择(“John”),并且选中项目列表包含所有四个项目。取消选择“Peter”时,所选的最后一项仍然是“John”。由于selectedItem
未更改,因此不会调用您的更改侦听器。当您取消选择另一个项目然后重新选择它时,最后选择的项目将更改为该项目,并调用您的侦听器。
您看到的“怪异”边框只是表格中显示的焦点(您只是点击它)未被选中的单元格。
要查看所选项目的所有更改,您需要使用所选项目的列表注册ListChangeListener
:
table.getSelectionModel().getSelectedItems().addListener((Change<? extends Person> change) ->
System.out.println(table.getSelectionModel().getSelectedItems());