Я тоже сталкивался с этой проблемой.Все опубликованные решения не работали для меня, потому что если я вызову DefaultListModel # remove (int), это изменит базовый список, и поэтому индексы, которые я собрал ранее с помощью JList # getSelectedIndices (), больше не действительны.
IЯ пришел к этому решению, которое сработало для меня.
for (MyObject o : jList1.getSelectedValuesList())
{
((DefaultListModel<MyObject>)jList1.getModel()).removeElement(o);
}
При обработке выбранных объектов мне не нужно заботиться об индексах и их достоверности.