2016-02-29 3 views
0

Я не уверен, что это дубликат или нет (возможно, это так), но я не могу найти то, что ищу.Java/Eclipse: удалить элемент ArrayList по указанному индексу

У меня есть статические ArrayList держит объекты, созданные из конструктора в этом классе, или любой класс, расширяющий его:

public static ArrayList<Person> PersonList = new ArrayList<>(); 

public Constructor(....){ 
    PersonList.add(this); 
} 

Теперь я пытаюсь удалить объекты из этого ArrayList с помощью индекса, но я m получение ArrayIndexOutOfBounds: Array index out of range: (указатель).

Теперь я знаю, что эта ошибка говорит мне, что в указанной позиции нет элемента, но тогда я не понимаю, почему PersonList.size() возвращает 4 (если в списке 4 элемента).

Я новичок в java, поэтому я надеюсь, что здесь кто-то может мне помочь. Вот код:

list.addMouseListener(new MouseAdapter() { 
    @Override 
    public void mousePressed(MouseEvent arg0) { 
    if(SwingUtilities.isRightMouseButton(arg0)) { 
     try { 
     Person.PersonList.remove(list.getSelectedIndex()); 
     list.remove(list.getSelectedIndex()); 
     }catch (Exception e) { 
      System.out.println(e); 
     } 
     System.out.println("Index: " + list.getSelectedIndex()); 
     updateData(); 
    } 
    } 
}); 
+0

С каким индексом вы пытаетесь получить доступ? – resueman

+0

Список @resueman - это JList PersonList, и я пытаюсь удалить их как одним щелчком объекта. Я пытаюсь получить индекс выбранного пользователем строки JList и удалить запись PersonList этой строки. Не уверен, что это имеет смысл. –

+1

Какая строка выдает ошибку? 'Person.PersonList.remove' или' list.remove'? Когда вы отлаживаете индекс, это правильный индекс, который вы хотите? –

ответ

0

Я смущен этим:

public Constructor(....){ 
    PersonList.add(this); 
} 

Похоже, каждый раз, когда вы создаете новый объект этого класса (Личность я предполагаю) вы добавляете его в список переменных класса. Я предполагаю, что каждый раз, когда вы создаете новый экземпляр этого класса, он переустанавливает глобальный список. Можете ли вы подтвердить, что PersonList не всегда размер = 1? Я подозреваю, что это так, поэтому переместите этот список в другой класс.

+0

Да, я проверил, что размер увеличивается (и уменьшается, спасибо). Я дам вам решение, спасибо за всю помощь и полезную информацию. –

0

Хорошо, что после тестирования немного кажется, что все работает отлично. Он выдает сообщение об ошибке, но после обновления .size() после каждого удаления он уменьшается.

Хотя я не знаю, почему это работает, если оно говорит мне, что это не так?

+0

Не думаю, что для ответа есть достаточно информации. Лично я не думаю, что это хорошая идея иметь «Список» вашего объекта «Личность» в этом классе. Я бы удалил этот список из класса декоратора и сохранил его в классе, к которому вы обращаетесь. –

+0

@Ryan Sayles Я делаю это так, потому что это часть задания в моем университете, хотя я думаю, что это хорошая идея. –

Смежные вопросы