如何从数据库读取数据填充JTable 解决仅显示最后一条记录问题
问题根源
遍历商品列表的循环中,每次迭代都重新为data变量赋值仅包含当前单条记录的二维数组,前一次循环存入的所有数据都会被覆盖,循环执行完成后data自然只保留最后一条商品记录。
另外代码存在一处笔误:循环内获取分类ID时写的prodcttList是拼写错误,正确变量名为预先定义的productList,该问题会直接导致编译失败。
推荐实现(无需手动构造二维数组)
直接调用DefaultTableModel的addRow方法逐行插入数据即可,不需要提前维护固定长度的二维数组,代码更简洁,后续动态增删表格数据也更方便:
ArrayList<Produkt> productList; private void createTable() { String[] col = {"ID", "name", "price", "category"}; DefaultTableModel tableModel = new DefaultTableModel(col, 0); for (Produkt product : productList) { Object[] rowData = new Object[]{ product.getId(), product.getName(), product.getPrice(), product.getCategory() }; tableModel.addRow(rowData); } productsTable.setModel(tableModel); }
固定二维数组的正确写法
如果业务要求必须先把所有数据存入Object[][]结构再传入表格模型,需要先按照商品列表的总长度初始化二维数组,再通过下标逐行填充,禁止在循环内重新给data变量整体赋值:
ArrayList<Produkt> productList; private void createTable() { String[] col = {"ID", "name", "price", "category"}; // 初始化二维数组:行数等于商品总数,列数固定为4对应4个字段 Object[][] data = new Object[productList.size()][4]; for (int i = 0; i < productList.size(); i++) { Produkt currentProduct = productList.get(i); data[i][0] = currentProduct.getId(); data[i][1] = currentProduct.getName(); data[i][2] = currentProduct.getPrice(); data[i][3] = currentProduct.getCategory(); } productsTable.setModel(new DefaultTableModel(data, col)); }
实际开发中优先选择第一种直接操作TableModel的方案,后续做表格数据新增、删除、修改时不需要重新构造整个二维数组,性能和可维护性都更好。
内容的提问来源于stack exchange,提问作者Peloucvo
相关产品推荐
相关产品推荐

