在JTable中显示ArrayList数据:移除非目标类型导致的空行
解决JTable展示不同类型数据时的空行问题
你的代码存在两个核心问题,导致出现空行和列数据错误:
- 直接使用原
vehicles列表的索引填充数据数组,遇到非目标类型的元素时,对应位置的数组行未被赋值,最终JTable会显示这些空行; - 内层循环中重复给同一
data[i][j]赋值,所有列最终都会被最后一个属性值覆盖,列数据完全错误。
正确的实现思路
先从原列表中筛选出目标类型的对象,再根据筛选后的列表长度创建对应的数据数组,这样就不会产生空行,同时按列顺序逐个赋值属性。
示例代码(以AutoRickshaw表格为例)
// 第一步:筛选出所有AutoRickshaw类型的对象 List<AutoRickshaw> autoRickshawList = new ArrayList<>(); for (Vehicle vehicle : vehicles) { if (vehicle instanceof AutoRickshaw) { autoRickshawList.add((AutoRickshaw) vehicle); } } // 第二步:根据筛选后的列表长度创建数据数组 String[] columns = {"ID", "名称", "重量", "颜色", "速度", "排量", "扭矩", "座位数", "油箱容量", "离地间隙"}; Object[][] autoTableData = new Object[autoRickshawList.size()][columns.length]; // 第三步:逐个填充每行的列数据 for (int row = 0; row < autoRickshawList.size(); row++) { AutoRickshaw ar = autoRickshawList.get(row); autoTableData[row][0] = ar.getVehicleId(); autoTableData[row][1] = ar.getVehicleName(); autoTableData[row][2] = ar.getVehicleWeight(); autoTableData[row][3] = ar.getVehicleColor(); autoTableData[row][4] = ar.getVehicleSpeed(); autoTableData[row][5] = ar.getEngineDisplacement(); autoTableData[row][6] = ar.getTorque(); autoTableData[row][7] = ar.getNumberOfSeats(); autoTableData[row][8] = ar.getFuelTankCapacity(); autoTableData[row][9] = ar.getGroundClearance(); } // 创建AutoRickshaw对应的JTable JTable autoRickshawTable = new JTable(autoTableData, columns);
ElectricScooter表格的实现逻辑
完全复用上述思路,只需把AutoRickshaw替换为ElectricScooter,并对应修改属性赋值的代码即可。
内容的提问来源于stack exchange,提问作者NeOx
相关产品推荐
相关产品推荐

