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

如何将ArrayList中的数据动态展示到JTable中

问题原因

  • 你的getAll方法返回的是嵌套ArrayList结构:外层List的每个元素对应数据库的一行记录,每个行元素本身也是ArrayList,存储当前行的每一列值。无法直接强转为一维Object数组,也不能直接传入TableModel。
  • 现有getAll方法存在隐藏bug:遍历列的循环条件为x < totalColumn,JDBC ResultSet的列下标从1开始,该写法会漏掉最后一列数据,需要先修改为x <= totalColumn。

修复步骤

1. 先修复getAll方法的列遍历问题

public ArrayList<Object> getAll() {
    try {
        ArrayList<Object> resultList = new ArrayList<>();
        query = this.conn.prepareStatement("select * from " +
                this.currentTable + this.tableClass.getWhere());
        ResultSet result = query.executeQuery();
        ResultSetMetaData meta = result.getMetaData();
        int totalColumn = meta.getColumnCount();
        while(result.next()) {
            ArrayList<Object> obj = new ArrayList<>();
            // 修改循环条件,避免漏掉最后一列
            for (int x = 1; x <= totalColumn; x++) {
                obj.add(result.getObject(x));
            }
            resultList.add(obj);
        }
        result.close();
        query.close();
        return resultList;
    } catch (Exception e) {
        System.out.println("Error : " + e.getMessage());
    }
    return null;
}

2. 填充DefaultTableModel的实现代码

如果暂时不需要显示数据库真实列名,可以按列数生成默认列名再填充数据:

DefaultTableModel model = new DefaultTableModel();
ArrayList<Object> dataList = this.getAll(); 

// 增加非空判断避免空指针异常
if (dataList != null && !dataList.isEmpty()) {
    // 按第一行的列数生成默认列名,也可以自定义替换成业务需要的列名
    int columnCount = ((ArrayList<Object>)dataList.get(0)).size();
    for (int i = 0; i < columnCount; i++) {
        model.addColumn("列" + (i+1));
    }
    // 遍历每一行数据,转成数组后加入表格模型
    for (Object rowObj : dataList) {
        ArrayList<Object> rowList = (ArrayList<Object>) rowObj;
        model.addRow(rowList.toArray());
    }
}

tableResult.setModel(model);

如果需要显示数据库真实列名,修改getAll方法,从ResultSetMetaData中取出列名集合和数据一起返回即可。

内容的提问来源于stack exchange,提问作者smzapp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 02:15:08