【问题标题】:How to refresh a JTable on JScrollPane如何在 JScrollPane 上刷新 JTable
【发布时间】:2014-05-12 09:35:29
【问题描述】:

与许多其他人一样,我希望在添加行后实现我的 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 Model 显示模型已刷新(行数与之前的变体不同),但表格仍未出现。我试图插入 resultsTable.repaint() 但它也没有帮助。

UDP(NB) 我发现,问题集中在这个滚动面板上。

如果我将表格直接添加到大面板,它会被刷新(但我看不到所有结果,因为我无法向下滚动)

 this.add(resultsTable, BorderLayout.CENTER); 

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

【问题讨论】:

  • 显示FoundResultTableModel的代码。
  • 为了尽快获得更好的帮助,请发布MCVE(最小完整且可验证的示例)。
  • 如果在程序中滚动到 JTable 的底部,然后添加行会怎样?

标签: java swing jtable jscrollpane abstracttablemodel


【解决方案1】:

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

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

【讨论】:

  • 我发现问题是由滚动条(JScrollPane)引起的
【解决方案2】:

将此添加到您的代码中,

resultsTable.revalidate();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2015-09-06
    • 2011-12-05
    相关资源
    最近更新 更多