2011-12-30 15 views
1

テーブルの更新イベントをキャッチして、現在の値が何であるか、影響を受ける列と行の新しい値を確認したい場合があります。それが期待どおりでない場合、私は更新を取り消して元に戻すことを希望します。これは、TableModelListenerを使用するのは非常に難しく、スタックオーバーフローエラーが発生し続けることがあります。手動で状態を維持して再帰的に再呼び出しすることなく元の状態に戻すことができないためです。スイングでテーブル更新イベントをキャンセルする

+0

TableModelEventが起動されると、データはモデル内で既に変更されています。イベントをキャンセルするには遅すぎます。モデルが変更されないようにするには、セルのエディションをキャンセルする必要があります。 –

+0

私はJBが、私が手動で状態を維持しようとしていた理由と解決策が逆火されたことを理解しています。セルのエディションをキャンセルするには、どのイベントを捕まえなければなりませんか?そして私はそれをどのように取り消すのですか? ..ありがとう。 – sethu

+0

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#validtextを参照してください。 –

答えて

3

独自のTableModelを作成(またはDefaultTableModelまたはAbstractTableModelを拡張)し、setValueAtをオーバーライドします。そこでは、基礎となるモデルを(super.setValueAt()を使用して)更新することも、スローすることもできます。スーパークラスを呼び出さない限り、変更は決して通過しないため、古い値です。

+0

美しい..なぜ私はそれを考えなかったのですか:) ..ありがとうKylar .. – sethu

+0

editCellAt()とeditingStopped()の間のどこかで傍受することもできるかもしれませんが、@Kylarは最も単純です提案。 – user949300

関連する問題