удаление элементов из списка через JTable

#jtable

#jtable

Вопрос:

Я создал TableModel, который использует ArrayList, я пытался удалить выбранный элемент как из таблицы, так и из списка, я хотел, чтобы он удалял все выбранные элементы, но у меня были исключения, поэтому я попытался упростить это, я сделал это:

 public void actionPerformed(ActionEvent ev) {
    purchases.remove(purchasesTable.convertRowIndexToModel(purchasesTable.getSelectedRow()));

    purchasesTableModel.fireTableDataChanged();
}
  

Но когда я удаляю строки, даже если это работает по назначению, иногда я получаю эти исключения:

Исключение в потоке «AWT-EventQueue-0» java.lang.Исключение IndexOutOfBoundsException: индекс: 3, Размер: 3 в java.util.ArrayList.rangeCheck(ArrayList.java:638) в java.util.ArrayList.get(ArrayList.java:414) в таблице.PurchasesTableModel.setValueAt(PurchasesTableModel.java:62) в javax.swing.JTable.setValueAt(JTable.java:2743) в javax.swing.JTable.editingStopped(JTable.java:4725) в javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) в javax.swing.DefaultCellEditor$EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) …

и я понятия не имею, что может вызвать это

в моей модели в setValueAt я просто делаю это: Purchase purchase = list.get(rowIndex); насколько я понимаю, эта функция получает неверный индекс, но почему? ;/

Что ж, спасибо всем за помощь; p Я НАШЕЛ РЕШЕНИЕ: когда я удалял ячейку, она все еще находилась в режиме редактирования, это был JComboBox

 if (purchasesTable.isEditing()) purchasesTable.getCellEditor().stopCellEditing();

purchasesTable.editingStopped(new ChangeEvent(purchasesTable));
  

оба эти решения сработали для меня

Ответ №1:

Ошибка сообщает вам, что ваш номер индекса не является индексом в ArrayList.size(). Размер (), равный 3, имеет индекс 0 и будет иметь индексы [0, 1, 2]. Индекс, равный 3, выходит за рамки.