2009-07-14 16 views
0

私はxx秒ごとに更新するライブ(外部)データソースによって作成されるテーブルモデルを持っています。データはJTableに表示されます。ライブデータによるJTableエディタの変更

ユーザは、AbstractCellEditorを拡張するセルリストを使用してテーブルセルのデータを上書きできます。ユーザーがクリックすると、コードは新しい値がテーブルモデルの値と等しいかどうかを確認します。そうでない場合は、オーバーライドとみなされます。

問題は、フィールドをクリックして値を変更せずに、外部データソースがその間にテーブルモデルを更新すると、ユーザーが単なる値ではなく古い値を使用してオーバーライドを設定すると考えられるということですオーバーライドをキャンセルします。

これを行うための標準ロジックと実装は何ですか?

答えて

0

ユーザーが を変更したかどうかを検出するにはどうすればよいですか?

私はTableCellListenerと呼ばれるクラスを作成しました。このクラスはセルエディタを使って行われた変更をリッスンします。セルが編集を開始する前に値のコピーをとり、編集を停止した後にセルの値と比較します。それはあなたが望むかもしれないように聞こえる。

もう1つの解決策は、バックグラウンドでTableModelを更新する前に、テーブルが現在セルを編集しているかどうかを確認することです。あなたが更新を受け入れるかキャンセルするためのダイアログをポップアップするかもしれません。

0

テーブルモデルは、テーブルセルがセル単位でオーバーライドされたかどうかを示す状態を維持する必要があります。そのようなことをしないと、ユーザーがセルをオーバーライドし、ライブデータが入って、使用されているのと同じ値に変更されるという問題も発生します。

TableModelのオーバーライドsetValueAt(Object,int,int)メソッドでこの状態を設定できます。 AbstractCellEditorの編集が完了したら、このメソッドはJTableによって呼び出されます。

関連する問題