我用一堆字符串创建了一个 ListView,它具有多选模式,最后我向 selectedItemProperty() 添加了一个监听器,如下所示:
ObservableList<String> myStringsObsList = FXCollections.observableArrayList(strings);
ListView<String> listView = new ListView<String>(myStringsObsList);
listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
listView.getSelectionModel().selectedItemProperty().addListener(
new ChangeListener<String>() {
public void changed(ObservableValue<? extends String> ov, String old_val, String new_val)
{
System.out.println("Selection Changed!");
}
}
});
Run Code Online (Sandbox Code Playgroud)
选择项目时,一切都打印正常,但是一旦我开始使用 Ctrl 取消选择项目。此处没有打印任何内容,因为可能不会触发已更改的事件。
有谁知道这是否是一个错误?或者我在这里做错了什么?
最后,我只需要知道选择是否以某种方式发生了变化(无论是选择还是取消选择项目),这样我就可以启动另一个进程。
编辑 --- 使用 Ctrl 取消选择时,“选择已更改!” 仅当取消选择所选项目的最后一个项目时才打印。
将此侦听器注册到列表视图:
listView.getSelectionModel().getSelectedItems()
.addListener(new ListChangeListener<String>()
{
@Override
public void onChanged(Change<? extends String> arg0)
{
System.out.println("Selection Changed!");
}
});
Run Code Online (Sandbox Code Playgroud)