Попытка удалить Элемент из объекта DefaultListModel

Использование Java версии 9 У меня есть некоторый тестовый код для удаления элемента из списка, созданного путем передачи ссылки на DefaultListModel. Вот что я делаю.

  1. создать объект DefaultListModel
  2. добавить к нему 8 элементов (A..H), вызвав addElement
  3. удалить элемент, вызвав removeElement
  4. создать Jlist передать ссылку моего DefaultListModel к нему
  5. В списке отображаются все 8 элементов, ничего не удалено. код

     philosophers = new DefaultListModel<String>();
     philosophers.addElement( "A" );
     philosophers.addElement( "B" );
     philosophers.addElement( "C" );
     philosophers.addElement( "D" );
     philosophers.addElement( "E" );
     philosophers.addElement( "F" );
     philosophers.addElement( "G" );
     philosophers.addElement( "H" );
     philosophers.removeElement(1);
     lista = new JList<String>( philosophers );      
    

1 ответ

Решение

Когда у вас возникнут проблемы, нажмите JavaDocs...

DefaultListModel#removeElement

public boolean removeElement (Object obj)
Удаляет первое (с наименьшим индексом) вхождение аргумента из этого списка.

Параметры:
obj - удаляемый компонент

Интересный момент здесь, параметр является Objectне индекс. Это означает, что с помощью автоматического бокса Java вы на самом деле пытаетесь удалить Integer(1), которого нет в модели.

Вместо этого, если вы сделали что-то вроде philosophers.removeElement("B");

Однако, если мы прочитаем немного больше в JavaDocs, мы найдем

DefaultListModel#remove

public E удалить (int index)
Удаляет элемент в указанной позиции в этом списке. Возвращает элемент, который был удален из списка.

Выдает исключение ArrayIndexOutOfBoundsException, если индекс выходит за пределы диапазона (index < 0 || index >= size()).

Параметры:
index - индекс удаляемого элемента

Ах, это больше похоже на то, что вы после

Другие вопросы по тегам