You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在JTable中显示ArrayList数据:移除非目标类型导致的空行

解决JTable展示不同类型数据时的空行问题

你的代码存在两个核心问题,导致出现空行和列数据错误:

  1. 直接使用原vehicles列表的索引填充数据数组,遇到非目标类型的元素时,对应位置的数组行未被赋值,最终JTable会显示这些空行;
  2. 内层循环中重复给同一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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 08:30:24