2014-06-20 48 views
0

我做了TableModel使用ArrayList,我試圖從表和列表中刪除選定的項目,我希望它刪除所有選定的項目,但我有異常拋出,所以我試圖使它簡單,我做了這個:從列表中刪除項目通過JTable

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

    purchasesTableModel.fireTableDataChanged(); 
} 

但是當我刪除行,即使它的工作原理是有時意我得到這些異常:在線程「AWT-EventQueue的 - 0」 的Java

異常.lang.IndexOutOfBoundsException:索引:3,大小:3在 java.util.ArrayL ist.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)維持在 javax.swing.AbstractCellEditor.fireEditingStopped(AbstractCellEditor.java:141) javax.swing.JTable.editingStopped(JTable.java:4725)在 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超出範圍。

+0

我意識到這一點,我問爲什麼會發生這種情況...... – user3758262