- ベストアンサー
テーブルのセルが修正されたかを知りたい
こんにちは。 いつもここで勉強しています。 JTableのセルを修正された場合のイベントを拾いたく思い、TableModelListenerを実装させています。 セルを修正すると、tableChangedメソッドが確かに呼ばれるのですが、セルをダブルクリックしたりするだけで呼ばれていまうので困っています。セルの値が修正された場合のみを通知してもらいたいのですが、何か良い方法があれば教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
editingStopped()は、文字通り「編集の完了」を通知するイベントであって、キャンセルせずに完了すると通知されるものです。編集した値が以前と同じかどうかは関係なく、編集を完了(確定)したことによって呼び出されるのだと思います。(ESCキーで編集をキャンセルすると発生しない) >このメソッドはセルの内容が変更された場合のみ通知されると某書籍に書いてましたが、 とのことですが、APIリファレンスを参照すると、 | エディタが編集を終了したことをリスナーに通知します。 とあるので、APIリファレンスを信じたほうがよさそうです。 で、内容の変更を知る方法ですが、適切なイベント発生時に編集前の値と編集後の値を比較したらよいかと思います。 TableModelListenerでは変更前の値を知ることができないようなので、別途、変更前の値をどこかで保持していれば、これと比較することで、変更を知ることができると思います。 他の方法として、TableCellEditorのstopCellEditingをオーバーライドすれば、今まさに編集した値をModelに反映しようとしているタイミングなので、編集前後の値を取得して比較できました。自作のTableCellEditorを作って、これを利用したListenerを実装したら使いやすいと思います。
その他の回答 (1)
- pcbeginner
- ベストアンサー率46% (261/560)
試していませんので、的外れな回答、それやったけど同じだから質問したんだよ的な回答であったらごめんなさい。 TableModelEventのgetType()メソッドでイベントのタイプを判断されてはいかがでしょうか?
補足
レスありがとうございます。 イベントのタイプではうまく区別されないみたいなのですが、普通は修正したかしなかったかの区別はされるのでしょうか? editingStopped()なるものを使用したのですが、 このメソッドはセルの内容が変更された場合のみ 通知されると某書籍に書いてましたが、 やはりダブルクリックなどして、セルを選択しただけで 通知されます。 editingStoppedとはやはりセルの変更がされた場合のみ呼ばれるものなのでしょうか?