循环遍历jList索引以删除项目

时间:2015-01-08 10:44:27

标签: java jlist selected indices

我尝试遍历jList中所选项目的索引以删除它们。

int[] indexoptio;
    indexoptio = this.list_optio.getSelectedIndices();

    for (int i=0; i<indexoptio.length ; i++) {
        this.optio.remove(indexoptio[i]);}
    this.list_optio.setModel(optio);

除非我的列表中只有2个项目,否则它非常完美。当我选择这两个项目时,它只删除其中一个......

1 个答案:

答案 0 :(得分:0)

这是因为在处理引用它的一组索引时更改数据结构不变。使用示例更容易显示。假设您有一个包含3个元素的列表items

["item1", "item2", "item3"]

你想要删除第1项和第3项,使用上面的代码实际上是:

items.remove(0);
items.remove(2);

第一次删除后,列表变为:

["item2", "item3"]

查看"item3"现在在位置1的情况,而之前它是在第2位?

您选择的索引列表是指原始数据列表,但在第一个删除列表已更改之后。

我认为以下内容适合您:

int[] indexoptio;
indexoptio = this.list_optio.getSelectedIndices();

for (int i=0 ; i<indexoptio.length ; i++) {
    this.optio.remove(indexoptio[i]-i);
}
this.list_optio.setModel(optio);

每次迭代,原始列表的大小减小了1并且一些元素已经向下移动,因此通过减去循环计数器(indexoptio[i]-i),它应该使值保持同步