遍历 jList 索引以删除项目
Loop through jList indices to remove items
我尝试遍历 jList 中我 selected 项目的索引以删除它们。
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 个项目。当我 select 两项时,它只会删除其中一项...
这是因为在处理一组引用它的索引时更改数据结构。使用示例更容易显示这一点。假设您有一个包含 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
) 它应该使值保持同步
我尝试遍历 jList 中我 selected 项目的索引以删除它们。
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 个项目。当我 select 两项时,它只会删除其中一项...
这是因为在处理一组引用它的索引时更改数据结构。使用示例更容易显示这一点。假设您有一个包含 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
) 它应该使值保持同步