【问题标题】:JTable no update when selection选择时JTable没有更新
【发布时间】:2009-03-16 23:19:12
【问题描述】:

当我在 JTable 中选择一行时,我的 JTable 不再更新。 当我不选择一行时,下面的代码按预期工作。一行被添加到 JTable。

    @Override
public void update (Observable arg0, Object arg1)
{
    if (arg0 instanceof Logger)
    {
        LogItem last = systemController.logController.getLog().getLastLogItem();
        this.history.add(last);
        this.logTableModel.addItem(last);

        this.logTable.tableChanged(new TableModelEvent(this.logTableModel));
        ((DefaultTableModel)this.logTable.getModel()).fireTableStructureChanged();
        this.logTable.repaint();
        this.logTable.doLayout();
    }

}

当我关闭窗口并重新打开它时,我可以看到新行。

谁能解释一下为什么在选择一行后,我在 JTable 中看不到任何更新?

【问题讨论】:

    标签: java jtable


    【解决方案1】:

    您的代码存在许多问题。您不应该调用 fireTableStructureChanged,因为这与表结构(列数等)更改而不是表数据本身(添加行、更改单元格值等)有关。此外,您不需要在表本身上调用 repaint 和 doLayout,因为这应该由模型更改触发。

    我认为你应该看看 Java 教程中的 How to Use Tables,具体看看使用表模型、监听数据更改和触发数据更改事件。

    【讨论】:

      【解决方案2】:

      update() 调用是否发生在 Swing 事件线程中?如果不是,代码将需要用类似的东西包装:

      SwingUtilities.invokeLater(new Runnable() { public void run() {
        logTableModel.addItem(last);
      }});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-17
        • 1970-01-01
        • 1970-01-01
        • 2010-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多