【问题标题】:How to refresh Data in JTable and show updated list如何刷新 JTable 中的数据并显示更新的列表
【发布时间】:2014-10-09 20:04:52
【问题描述】:

我是 java 新手,正在尝试刷新 jTable。我想要做的是显示 Jtable 中的数据列表,现在我确实有一个刷新图标,如果我点击它,它会刷新表格并更新其中的记录。 我尝试了很多东西,但没有成功。我所尝试的是:

// 拿了 ref.帮助:

尝试 1:

private void remakeData(CollectionType< Objects > name) {
    model.setRowCount(0);
    for (CollectionType Objects : name){
    String n = Object.getName();
    String e = Object.getEmail();
    model.insertRow(model.getRowCount(),new Object[] { n,e });
    }}

尝试 2:

tableModel.fireTableDataChanged();

尝试 3:

list_asset.invalidate();  // list_asset is my jTable
list_asset.repaint();

尝试 4:

((AbstractTableModel) list_asset.getModel()).fireTableCellUpdated(data.size(), 0);

尝试 5:

jPanel1.revalidate();
jPanel1.repaint();
tableModel.setRowCount(0);
tableModel = new DefaultTableModel(data,columnNames); 
list_asset.setModel(tableModel);

我尝试了很多东西,在谷歌或 Stackoverflow 上搜索时,只找到了我已经尝试过的东西。

请帮助我完成这件事。

谢谢

【问题讨论】:

  • 考虑提供一个runnable example 来证明您的问题。这将导致更少的混乱和更好的响应
  • 你知道 validate()
  • @Nabin 我不太了解
  • @Nabin 我怀疑这与validate() 有很大关系,如果有的话,我宁愿建议使用revalidate(),它能够将多个调用合并为一个调用。

标签: java swing jtable


【解决方案1】:

DefaultTableModel 将通知其侦听器发生更改,并且任何侦听表都会更新自身作为响应。如果该方法是您的第一次尝试无效,则问题出在其他地方。特别是,您不需要自己使任何表模型事件无效、重新验证或触发。在这个完整的example 中,Add Row 按钮调用addRow(),它将请求转发到TableModel

private DefaultTableModel dtm = new DefaultTableModel(…) {…}

private void addRow() {
    dtm.addRow(new Object[]{
        …
    });

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-11
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多