我创建了使用ArrayList的TableModel,我试图从表和List中删除所选项目,我希望它删除所有选中的项目,但我抛出了异常,所以我试着让它变得简单,我做了这个:
public void actionPerformed(ActionEvent ev) {
purchases.remove(purchasesTable.convertRowIndexToModel(purchasesTable.getSelectedRow()));
purchasesTableModel.fireTableDataChanged();
}
但是当我删除行时,即使它按预期工作,我也会得到以下异常:
线程“AWT-EventQueue-0”中的异常 java.lang.IndexOutOfBoundsException:Index:3,Size:3 at java.util.ArrayList.rangeCheck(ArrayList.java:638)at java.util.ArrayList.get(ArrayList.java:414)at table.PurchasesTableModel.setValueAt(PurchasesTableModel.java:62)at javax.swing.JTable.setValueAt(JTable.java:2743)at javax.swing.JTable.editingStopped(JTable.java:4725)at javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) 在 javax.swing.DefaultCellEditor中的$ EditorDelegate.stopCellEditing(DefaultCellEditor.java:368) ...
我不知道是什么导致这个
在setValueAt的模型中我只是这样做:
Purchase purchase = list.get(rowIndex);
所以根据我的理解,这个函数得到的索引不正确,但为什么呢? ; /
非常感谢大家的帮助; p I I FOUND SOLUTION: 当我删除单元格仍处于编辑模式时,它是JComboBox
if (purchasesTable.isEditing()) purchasesTable.getCellEditor().stopCellEditing();
purchasesTable.editingStopped(new ChangeEvent(purchasesTable));
这两种解决方案都适合我
答案 0 :(得分:1)
错误告诉您索引号不是ArrayList.size()中的索引。 size()为3是0索引并且将具有索引[0,1,2]。索引3超出范围。