質問
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に更新が表示されなくなった理由を誰かが説明できますか?
解決
update()呼び出しはSwingイベントスレッドで発生していますか?そうでない場合は、コードを次のようなものでラップする必要があります。
SwingUtilities.invokeLater(new Runnable() { public void run() {
logTableModel.addItem(last);
}});
他のヒント
コードには多くの問題があります。 fireTableStructureChangedを呼び出すべきではありません。これはテーブル構造(列の数など)に関連しているため、テーブルデータ自体ではなく(行の追加、セル値の変更など)変更されます。また、テーブル自体でrepaintとdoLayoutを呼び出す必要はありません。これはモデルの変更によってトリガーされるためです。
使用方法をご覧くださいJavaチュートリアルのテーブル。具体的には、テーブルモデルの使用、データ変更のリッスン、データ変更イベントの発生をご覧ください。
所属していません StackOverflow