テキストコンポーネントはUndoManagerを使ってUNDO/REDOが簡単に実現できるけど、他のコンポーネントではUNDO機能は提供されていない。
でも編集可能なJTableをいじっていると、ついCtrl+Zとか押して戻したくなる(苦笑)
という訳で、JTableでUNDO/REDOを実装してみた。
UndoableEditSupportというクラスがあって、UndoManagerへの通知に便利。
それだけじゃなくて、編集を一括してまとめてくれたりとか、最低限の便利機能が揃っている。
でも一番肝心なUNDO/REDO処理(セルを編集したときに戻すとか行を追加したり削除したりして戻すとか)は自分で作らないといけないので、けっこう大変。(なにせメソッド数が多い)
しかもセルの値って「Object」だから、何でもいいんだよね。Javaではディープコピーがデフォルトではサポートされていないので、オブジェクトを戻し用にコピーしておいても、下手すると別の場所で書き換えられてしまったりする。
こりゃ標準でUNDO機能が提供できない訳だわなぁ。
でもせめて、行の削除前に通知するfireメソッドは欲しかった。
→ExTableModel
(HtJavaDBツールのテーブル編集用テーブルを、これを使ってUNDO/REDOできるようにしてみた)
(どうでもいいけど、RDBの「テーブル」とJTableの「テーブル」ってどっちも「テーブル」なので、区別したいときに困る(苦笑))