和其他人一样,我希望在添加行后实现JTable。 在这里,您可以看到我的代码片段。
ArrayList<> foundR = new ArrayList<FoundResult>();
JTable resultsTable = new JTable();
AbstractTableModel resultsModel = new FoundResultTableModel(foundR);//<- model which contains FoundResults as rows
JScrollPane scroller = new JScrollPane();
resultsTable.setModel(resultsModel);
scroller.add(resultsTable);
this.add(scroller, BorderLayout.CENTER);// a big panel which contains scroller and other components
然后添加使用以下方法的ActionListener:
foundR.clear();
foundR.addAll( ...);//<- so the foundR ArrayList is refreshed
resultsModel.fireTableDataChanged();
resultsModel.fireTableStructureChanged();
rowCount of results模型显示模型已刷新(与previveous变体不同的行数),但表仍未显示。我试图插入resultsTable.repaint()但它也没有帮助。
UDP(NB)我发现问题集中在这个滚动面板上。
如果我将表格直接添加到大面板,它会刷新(但我看不到所有结果,因为我无法向下滚动)
this.add(resultsTable, BorderLayout.CENTER);
如果我使用滚动条,则不会显示任何内容。你知道为什么吗?
答案 0 :(得分:1)
只需重新创建模型并将其设置为您的表格。
foundR.clear();
foundR.addAll( ...);//<- so the foundR ArrayList is refreshed
AbstractTableModel resultsModel = new FoundResultTableModel(foundR);
resultsTable.setModel(resultsModel);
答案 1 :(得分:0)
将此添加到您的代码中
resultsTable.revalidate();
由于您的模型已更改,但模型的更改也应通知表格。