2015-01-08 17 views
1

我尝试循环浏览jList中所选项目的索引以删除它们。通过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

它似乎像他只删除每个第二项... o0 –

+0

以其他方式做,而不是从'this.optio'中删除项目,创建一个新的jList复制所有项目在除了那些需要删除的列表以外的新列表。比分配新的jList'this.optio'。 这将始终给出一致的结果。 – Vicky

+0

但我如何将每个项目复制到一个新的jList除了那些在indexoptio? –

回答

0

这将是因为更改数据结构的同时处理引用它的一组索引不变。使用示例更容易显示。假设你有一个清单items有3个要素:

["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),它应该保持在同步的值

+0

完美!谢谢!!! –

+0

没问题,当我第一次使用Swing时,我遇到了完全相同的问题:) – tddmonkey