如何在JScrollPane上刷新JTable

时间:2014-05-12 09:35:29

标签: java swing jtable jscrollpane abstracttablemodel

和其他人一样,我希望在添加行后实现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); 

如果我使用滚动条,则不会显示任何内容。你知道为什么吗?

2 个答案:

答案 0 :(得分:1)

只需重新创建模型并将其设置为您的表格。

foundR.clear();
foundR.addAll( ...);//<- so the foundR ArrayList is refreshed
AbstractTableModel resultsModel = new FoundResultTableModel(foundR);
resultsTable.setModel(resultsModel);

答案 1 :(得分:0)

将此添加到您的代码中

resultsTable.revalidate();

由于您的模型已更改,但模型的更改也应通知表格。