Как удалить несколько элементов в JList - PullRequest
4 голосов
/ 06 октября 2011

Забавно, я не могу узнать, как удалить несколько выбранных элементов в JList

Помогите пожалуйста

enter image description here

UPD: ОК, проблема была в NetBeans, потому что он создает JList и устанавливает модель AbstractListModel, которая почему-то не работает с методом удаления.

Ответы [ 5 ]

15 голосов
/ 06 октября 2011
   DefaultListModel dlm = (DefaultListModel) subjectList.getModel();

      if(this.subjectList.getSelectedIndices().length > 0) {
          int[] selectedIndices = subjectList.getSelectedIndices();
          for (int i = selectedIndices.length-1; i >=0; i--) {
              dlm.removeElementAt(selectedIndices[i]);
          } 
    } 
2 голосов
/ 14 мая 2016

Я тоже сталкивался с этой проблемой.Все опубликованные решения не работали для меня, потому что если я вызову DefaultListModel # remove (int), это изменит базовый список, и поэтому индексы, которые я собрал ранее с помощью JList # getSelectedIndices (), больше не действительны.

IЯ пришел к этому решению, которое сработало для меня.

for (MyObject o : jList1.getSelectedValuesList())
{
    ((DefaultListModel<MyObject>)jList1.getModel()).removeElement(o);
}

При обработке выбранных объектов мне не нужно заботиться об индексах и их достоверности.

1 голос
/ 03 декабря 2011

Мое решение:

DefaultListModel dlm = (DefaultListModel) lst.getModel();
int count = lst.getSelectedIndices().length;

for (int i = 0; i < count; i++)
{
     dlm.removeElementAt(lst.getSelectedIndex());
}
0 голосов
/ 06 октября 2011

, где foo - это JList:

int[] selected = foo.getSelectedIndices();
for(int i : selected){
  foo.remove(i);
}
0 голосов
/ 06 октября 2011
public int[] getSelectedIndices()
...