繁体   English   中英

Observablelist和arraylist,行为不同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM