Удаление элементов из JList

у меня есть простой Jlist с данными изListТеперь я хочу удалить выбранный элемент из Jlist. Вот код:

final DefaultListModel model = new DefaultListModel();
final JList list = new JList(model);

//filling list
//loop for every element from List
 public static void sample(DefaultListModel model, List data)
      for(int i=;i
 Adam08 нояб. 2012 г., 23:13
getSelectedIndex () возвращает -1, если ничего не выбрано, и допустимы только индексы 0 или более ...
 Mitja Rogl08 нояб. 2012 г., 23:15
Я проверяю значение индекса, и это правильно!
 Mitja Rogl08 нояб. 2012 г., 23:24
Я добавил инициализацию модели
 millimoose08 нояб. 2012 г., 23:16
Трассировка стека неПосмотрите на все, что связано с вашим кодом, который вы опубликовали.
 Mitja Rogl08 нояб. 2012 г., 23:19
Когда я хочу очистить или удалить любой элемент из списка, я получаю эту трассировку стека.
 Sujay08 нояб. 2012 г., 23:26
+1 с @splungebob - как / где вы добавляете элементы в вашу модель?
 Mitja Rogl09 нояб. 2012 г., 15:39
Я обновил трассировку стека
 Mitja Rogl08 нояб. 2012 г., 23:30
обновлено. Я'm добавление элементов в функцию.
 splungebob08 нояб. 2012 г., 23:20
Требуется больше кода, желательно SSCCE. Как определяется модель?
 splungebob08 нояб. 2012 г., 23:24
Как вы устанавливаете данные в JList? У тебя нетЭто показано в вашем фрагменте кода. Я подозреваю, что вы заполняете JList в другом месте, что может быть причиной создания новой базовой модели, таким образом делая вашу переменную "модель» бесполезный.
 Robin09 нояб. 2012 г., 00:03
Код, который вы разместили, не имеет значения. Stacktrace предполагает, что вы модифицируетеArrayList который не имеет ничего общего сJList илиDefaultListModel вы используете вJList (поскольку это используетVector внутри). Опубликуйте больше трассировки стека и ту часть кода, которая появляется в трассировке стека

Ответы на вопрос(5)

что ваш индекс неотрицателен (как упоминалось другими), посмотрите, работает ли он (в вашем слушателе):

((DefaultListModel) jList.getModel()).remove(index);

Если так, то тыиспользовать устаревшую модель.

что у вас есть проблема в слушателе, потому что, когда элемент будет удален, выбранное значение изменится. Это причина того, что ваши "ValueChanged» Метод пытается получить selectedValue в неправильной позиции. Я могу'Я не вижу ваш метод valueChanged, но я думаю, что это причина.

СогласноJavadoc, с помощьюremove() вместоremoveElementAt() рекомендуется, так:

public void actionPerformed(ActionEvent arg0) {
    int index = list.getSelectedIndex();
    if (index != -1) {
        model.remove(index);
}

getSelectedIndex()

Возвращает наименьший выбранный индекс ячейки; выбор, когда в списке выбран только один элемент. Когда выбрано несколько элементов, это просто наименьший выбранный индекс.Возвращает -1, если нет выбора

Причина, по которой выошибка возникает потому, что по какой-то причине в вашем списке не выбрано ни одного элемента, и поэтому этот метод возвращает -1. Когда вы звонитеremoveElementAt() и передать его -1 в качестве значения параметра, это приведет к исключению.

Вам нужно сделать следующее:

public void actionPerformed(ActionEvent arg0) {
    int index = list.getSelectedIndex();
    if(index >= 0){ //Remove only if a particular item is selected
        model.removeElementAt(index);
    }
}
 Mitja Rogl08 нояб. 2012 г., 23:38
Я обновил код
 Mitja Rogl08 нояб. 2012 г., 23:28
Сделано это, не работает ... Потому что я получаю исключение.
 Sujay08 нояб. 2012 г., 23:31
@ extra90: я неЯ думаю, что именно здесь происходит исключение. Пожалуйста: 1. Разместите полную трассировку стека и 2. Разместите свой полный код илиSSCCE версия вашего кода
DefaultListModel model=new DefaultListModel();
    model.clear();
 jList1.setModel(model);

Ваш ответ на вопрос