如何批量删除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/天,具体规则查看活动详情