2009-03-16 8 views
2

JTableで行を選択すると、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のアップデートがもう表示されないのですか?

答えて

0

Swingイベントスレッドでupdate()呼び出しが行われていますか?そうでない場合は、コードを次のようにラップする必要があります:

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

コードにはいくつかの問題があります。 fireTableStructureChangedを呼び出すべきではありません。これは、表のデータ自体(行の追加、セルの値の変更など)を変更することなく、表の構造(列などなし)に関連しているためです。また、モデルの変更によってトリガーされる必要があるため、テーブル自体に対してrepaintおよびdoLayoutを呼び出す必要はありません。

JavaチュートリアルのHow to Use Tablesを見てください。具体的には、テーブルモデルを使用して、データ変更をリッスンし、データ変更イベントを発生させます。

関連する問題