2012-11-07 59 views
0

見我的方法爲什麼我不能刪除單元格在我的JTable

public void removeRow(int[] selectedRow) { 
    int len = selectedRow.length; 
    for(int i=0; i<len; i++) { 
     data.remove(selectedRow[i]); 
    } 
    fireTableDataChanged(); 
} 

這是錯誤調用堆棧

異常在線程 「AWT-EventQueue的 - 0」 java.lang.IndexOutOfBoundsException:指數:1 ,Size:1 at java.util.ArrayList.RangeCheck(ArrayList.java:547) at java.util.ArrayList.remove(ArrayList.java:387) at table.MyTableModel.removeRow(MyTableModel.java:89) at table.Tables $ 2.actionPerformed(Tables.java:61) at javax.swing.AbstractButt javax.swing.AbstractButton上的$ Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing。 DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

我使用靜態的ArrayList數據作爲數據持有人

回答

2

的問題是,當你刪除行,你的表指數調整/遞減每個刪除導致IndexOutOfBoundsException。你可以按相反的順序,以防止這種刪除行:

for (int i = selectedRow.length - 1; i >= 0; i--) { 
    data.removeRow(selectedRow[i]); 
} 
+0

+1喔刪除,好...假設'selectedRows'或升序排列;) – MadProgrammer

1

的問題是,一旦你刪除行,該selectedRow指數不再在data列表匹配的行

所以對於例如,如果我有兩行,我想刪除行0 & 1,我刪除行0,行1不再存在的時刻(它變爲0)

您需要做的是創建一個臨時列表,其中包含你實際上想要刪除的行...

List<MyRowData> toDelete = new ArrayList<MyRowData>(selectedRow.length); 
for(int index : selectedRow) { 
    toDelete.add(data.get(index)); 
} 

的,你應該簡單地能夠使用List#removeAll刪除行是從data列表

data.removeAll(toDelete); 
相關問題