参见我的方法
public void removeRow(int[] selectedRow) {
int len = selectedRow.length;
for(int i=0; i<len; i++) {
data.remove(selectedRow[i]);
}
fireTableDataChanged();
}
这是错误callstack
线程“AWT-EventQueue-0”中的异常java.lang.IndexOutOfBoundsException:索引:1,大小: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) 在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 在javax.swing.AbstractButton $ Handler.actionPerformed(AbstractButton.java:2318) 在javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 在javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
我使用静态ArrayList数据作为数据持有者
答案 0 :(得分:2)
问题是当你删除一行时,你的表索引会在每次删除时调整/减少,从而产生IndexOutOfBoundsException
。您可以按相反的顺序删除行以防止这种情况:
for (int i = selectedRow.length - 1; i >= 0; i--) {
data.removeRow(selectedRow[i]);
}
答案 1 :(得分:1)
问题是,只要删除一行,selectedRow
索引就不再与data
列表中的行匹配
所以,例如,如果我有两行,我想删除行0&amp; 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);