Попытка удалить Элемент из объекта DefaultListModel
Использование Java версии 9 У меня есть некоторый тестовый код для удаления элемента из списка, созданного путем передачи ссылки на DefaultListModel. Вот что я делаю.
- создать объект DefaultListModel
- добавить к нему 8 элементов (A..H), вызвав addElement
- удалить элемент, вызвав removeElement
- создать Jlist передать ссылку моего DefaultListModel к нему
В списке отображаются все 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 - индекс удаляемого элемента
Ах, это больше похоже на то, что вы после