【问题标题】:Observablelist and arraylist, different behaviorObservablelist 和 arraylist,不同的行为
【发布时间】:2014-06-19 19:28:21
【问题描述】:

我正在使用多重选择模式下的 javafx 列表视图,特别是一种删除列表中选定项目的方法。

带有可观察列表的方法

    list.getItems()
            .removeAll(
                    list.getSelectionModel()
                    .getSelectedItems());

带有数组列表的方法

    list.getItems()
            .removeAll(new ArrayList<Object>(
                            list.getSelectionModel()
                            .getSelectedItems()));

为什么这些实现会产生不同的结果? arraylist 实现仅删除选定的项目。 observablelist 实现删除第一个选定项目之后的所有内容,无论它是否被选中。

这可能是 javafx removeAll 方法中的错误吗?

【问题讨论】:

    标签: java collections javafx


    【解决方案1】:

    ObservableList 由实际模型支持,因此随着列表视图的变化条目被删除。通过首先将选定的元素复制到ArrayList,您可以消除问题:创建的ArrayList 不依赖于列表视图,因此在removeAll 操作期间不会更改。

    【讨论】:

      【解决方案2】:
      list.getItems().removeAll(
          new ArrayList<Object>(list.getSelectionModel().getSelectedItems()));
      

      这是在创建一个ArrayList&lt;Object&gt;,其中包含的Object 是另一种类型的列表结构。


      因此,在您的第一种情况下,list.getSelectionModel().getSelectedItems() 获取项目列表,.removeAll 浏览该列表以查看要删除的项目。

      在第二种情况下,new ArrayList&lt;Object&gt;(list.getSelectionModel().getSelectedItems()) 是列表的 ArrayList - .removeAll 在调用它的列表中查找该列表。

      【讨论】:

        猜你喜欢
        • 2015-12-30
        • 2014-04-07
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多