我在muliple选择模式下使用javafx listview,特别是删除列表中所选项目的方法。
带有observablelist的方法
list.getItems()
.removeAll(
list.getSelectionModel()
.getSelectedItems());
带有数组列表的方法
list.getItems()
.removeAll(new ArrayList<Object>(
list.getSelectionModel()
.getSelectedItems()));
为什么这些实现会产生不同的结果? arraylist实现仅删除选定的项目。 observablelist实现删除第一个选定项目之后的所有内容,无论它是否被选中。
这可能是javafx removeAll方法中的错误吗?
答案 0 :(得分:1)
ObservableList
由实际模型支持,并且随着删除条目,这些更改与listview 一起发生变化。通过首先将所选元素复制到ArrayList
,您可以消除问题:创建的ArrayList
不依赖于列表视图,因此在removeAll
操作期间不会更改。
答案 1 :(得分:0)
list.getItems().removeAll(
new ArrayList<Object>(list.getSelectionModel().getSelectedItems()));
这是创建一个ArrayList<Object>
,其中包含的Object
是另一种列表结构。
因此,在第一种情况下,list.getSelectionModel().getSelectedItems()
会获得一个项目列表,而.removeAll
会查看该列表以查看要删除的项目。
在第二种情况下,new ArrayList<Object>(list.getSelectionModel().getSelectedItems())
是列表的ArrayList
- .removeAll
在调用它的列表中查找该列表。