質問

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チュートリアルのテーブル。具体的には、テーブルモデルの使用、データ変更のリッスン、データ変更イベントの発生をご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top