2015-01-08 3 views
1

Я пытаюсь выполнить петли через индексы моих выбранных элементов в jList, чтобы удалить их.Loop через 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

Смежные вопросы