#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, выходит за рамки.