我尝试遍历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个项目,否则它非常完美。当我选择这两个项目时,它只删除其中一个......
答案 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
),它应该使值保持同步