2012-11-07 60 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); 
相关问题