使用List<NftDTO>填充JTable仅显示48条,如何显示全部68条?
解决JTable无法显示全部NftDTO数据的问题
核心问题排查与修复步骤
1. 修正TableModel初始化逻辑
你当前代码预先创建了4个空行,后续删除前2行的操作会干扰数据行统计,直接初始化空模型即可:
// 替换原模型初始化代码 String[] columsName = new String[] { "Nu.","Name", "Collection name", "royalties", "website" }; DefaultTableModel model = new DefaultTableModel(columsName, 0); // 初始行数为0,直接传入列名
2. 移除JTable固定尺寸限制
设置setPreferredSize会限制表格高度,超出部分无法显示,必须将表格放入JScrollPane实现滚动:
nftTable = new JTable(model); nftTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); // 优化列自适应 // 把表格放入滚动面板,后续将滚动面板添加到窗口 JScrollPane tableScrollPane = new JScrollPane(nftTable);
3. 确保序号生成逻辑正确
如果countNft()是生成行号的方法,避免内部逻辑错误导致序号异常,建议直接在循环内用索引计数:
int rowNum = 1; for (NftDTO nft : nfts) { if(nft.getNftUrl() == null) { nft.setNftUrl("there is no URL"); } model.addRow(new Object[] { rowNum++, nft.getNftName(), nft.getColletionName(), nft.getRoyalties(), nft.getNftUrl() }); }
4. 验证数据是否完整添加
循环结束后打印模型行数,确认数据是否全部加入:
System.out.println("模型总行数:" + model.getRowCount());
如果输出是68,说明是显示问题(未用滚动面板);如果是48,需检查obtainNftAccount方法返回的列表是否真的包含68个有效对象。
内容的提问来源于stack exchange,提问作者francesco14
相关产品推荐
相关产品推荐

