Это будет связано с изменением структуры данных при работе с набором индексов, ссылающихся на него без изменений. Это проще показать на примере. Скажем, у вас есть список 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
) он должен держать значения в синхронизации
кажется, что он удаляет только каждый второй элемент ... o0 –
Сделайте это иначе, вместо того, чтобы удалять элементы из 'this.optio', создайте новый jList, скопируйте все элементы в новый список, за исключением тех, которые необходимо удалить. чем назначить новый jList 'this.optio'. Это всегда даст согласованный результат. – Vicky
Но как я могу копировать каждый элемент в новый jList, кроме тех, которые находятся в indexoptio? –