如何批量删除JTable中的行 而不会导致数组越界

如何批量删除JTable中的行,JTable中删除行的方法是模型方法removeRow

注意是模型方法,下面的代码您可以看出


这个问题的出现,是因为我们初学者通常按照自己的意愿进行操作

然后按照自己的意愿操作可能是错的

比如下面的代码是删除多行的代码,请注意,他可能不会正常运行


DefaultTableModel dtm = (DefaultTableModel) table.getModel();
int[] row = table.getSelectedRows();
int L = row.length;
for(int i=0;i<L;i++){
	dtm.removeRow(row[i]);
}
代码中的第一行表示获得这个表的模型


第二行获得了被选择的行数据,注意这里是获得多行

第三行表示获得长度

第四行开始是一个for遍历移除某行

上面的代码如果被选择的数据是一行,那一般是没有问题的,是可以正常运行的

但是如果被选中要删除的行是2行或以上,就坑能会出现错误

错误提示如下:


java.lang.ArrayIndexOutOfBoundsException: 4 >= 3
	at java.util.Vector.removeElementAt(Vector.java:554)
这个错误很好理解,就是数组越界


为什么是这样呢

下面我举一个简单的例子

a0

a1

a2

a3

a4
上面表示有5行,红色表示我们选中需要删除的行

那么此时我们上面的代码,得到的选中数据就应该是

int[] row= {1,3,4}

这里我还是多说一句,使用getSelectedRows方法获得选中数据,是选中行的下标,并且是从上往下一次排序

那么接下来我们就看看for循环里都发生了什么,为什么会数组越界


for(int i=0;i<L;i++){
	dtm.removeRow(row[i]);
}
第一次循环的时候,他成功的删除了第二行,即删除了下标是1的行,此时的行数据就变成了



a0

a2

a3

a4

第二次循环的时候,他就应该删除dtm.removeRow(row[1]);


而此时row[1]=3

我们发现,他也会成功的删除第四行,即下标是3,此时的行数据就变成了

a0

a2

a3

第三次循环的时候,我们就会发现出错了,因为此时的row[2]=4

我们整个数据才3行,所以就发生了数组越界


好了以上说了这么多,主要是想说,其解决方法也是很简单的,您可以反着来删除

先删除最后一行,依次往上删除

即,将我们的for代码片段这样修改

for(int i=L-1;i>=0;i--){
	dtm.removeRow(row[i]);
}


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img