[英]Casting ArrayList<> to ObservableList<> for TableView
[英]Observablelist and arraylist, different behavior
我正在以多重选择模式使用javafx listview,特别是删除列表中选定项目的方法。
具有可观察列表的方法
list.getItems()
.removeAll(
list.getSelectionModel()
.getSelectedItems());
具有数组列表的方法
list.getItems()
.removeAll(new ArrayList<Object>(
list.getSelectionModel()
.getSelectedItems()));
为什么这些实现会产生不同的结果? arraylist实现仅删除选定的项目。 observablelist实现将删除第一个选定项目之后的所有内容,无论是否选中。
这可能是javafx removeAll方法中的错误吗?
该ObservableList
由实际模型的支持,并与ListView控件一起这样的变化,而条目被删除。 通过首先将选定的元素复制到ArrayList
,可以消除问题:创建的ArrayList
不依赖于列表视图,因此在removeAll
操作期间不会更改。
list.getItems().removeAll(
new ArrayList<Object>(list.getSelectionModel().getSelectedItems()));
这将创建一个ArrayList<Object>
,其包含的Object
是另一种类型的列表结构。
因此,在第一种情况下, list.getSelectionModel().getSelectedItems()
获取项目列表, .removeAll
浏览该列表以查看要删除的项目。
在第二种情况下, new ArrayList<Object>(list.getSelectionModel().getSelectedItems())
是列表的ArrayList
- .removeAll
在调用它的列表中寻找该列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.