« 2020年6月 | トップページ | 2020年9月 »

2020年7月

2020年7月26日 (日)

Java 1.8.0_261 での apple.awt.brushMetalLook

これまでずっと java 8 を 11 にバージョンアップせず使っている。その唯一の理由は,java 11 でウインドウのタイトルが unified にならないことであった。java 8 だと "apple.awt.brushMetalLook" を true に設定することで,title bar と tool bar が連続した美しいウインドウにできる。いや,できていた。

それが,1.8.0_261 から java 11 と同じになってしまったのである。悲しすぎる。java 11 に移行する潮時なのか。

251

2020年7月23日 (木)

Undo の充実 (4) StampEditor, StampTree

次に,StampEditor の undo を実装した。StampEditor の TableModel である ObjectReflectTableModel を extend した UndoableObjectRelflectTableModel に undoable... な method を作成し,おまとめ undo 機能も組み込んだ。ObjectReflectTableModel を使っていた AllergyInspector と PhysicalInspector も undoable にすることができた。

最後に StampTree を undoable にした。StampTree の TableModel である StampTableModel に同様の undoable な method を組み込んで undo できるようにした。

これでほとんどの操作が undo 可能となったと思う。

2020年7月22日 (水)

Undo の充実 (3) AtokListener

ATOK には,確定直後に ctrl-delete を押すと,未確定状態に戻してくれる「確定アンドゥ」という便利な機能がある。しかし JTextPane でこの操作を行うと,前の確定文字が消えずに未確定文字列が確定文字列の後ろに出る状態になってしまう(下図)。また,間違って半角アルファベットで打ち込んでしまった文を,かなキーの2度打ちでひらがなに戻して変換したり,間違って打ち込んでしまった英単語を,英数キーの2度打ちで半角アルファベットに変換してくれる機能も便利なのだが,これも JTextPane だともとの文字が残ってしまっていた

Atoklistener

ずっと何とかならないかと思っていたのだが,今回 TextComponentUndoManager に【おまとめ undo】機能を付けたので,ATOK の確定アンドゥと同時に JTextPane に undo を1回かけてやれば,前の確定文字列を消せるのではないかと思いついた。KeyListener と InputMethodListener を組み込んだ AtokListener を作って,上記動作をプログラムしたところうまく動作した。頑張ってプログラムしたおかげで日本語入力環境がぐっと便利になった。

Atok

2020年7月21日 (火)

Undo の充実 (2) TextComponentUndoManager

これまで KarteEditor の JTextPane に TextComponentUndoManager を付けて undo ができるようにしてあったが,機能的には入力を1段階戻すだけの単純なものであった。

そのため,例えばスタンプを DnD で移動した場合,【ドロップしたスタンプを書き込む】【位置や改行などの調節】【元のスタンプを削除する】という一連の操作が行われるので,これを undo すると,undo 1回毎に【元のスタンプが復活】【改行などの調節が戻る】【ドロップしたスタンプが消える】と戻っていくことになる。できれば DnD の操作はまとめて1回で undo したいところである。また,英単語を打つ場合【english word】と打った後に undo すると,【english wor】【english wo】【english w】と1文字ずつ戻ることになる。ここはできれば,単語毎にまとめて消えて欲しいところである。

そこで,まず TextComponentUndoManager に Timer を組み込んで,短時間 (30 msec 以内) に連続しておきた操作は,1つにまとめてから UndoManager に登録するようにした。これによって DnD は1回の undo で戻るようになり,ATOK の漢字変換後の入力も,変換して入力した分が1回の undo で戻るようになった。また,アルファベット入力の場合は, 前の入力をチェックして,アルファベットだった場合は前の undo 情報にマージするようにして,word 単位の undo ができるようにした。

Textcomponent_20200720082001

2020年7月20日 (月)

Undo の充実 (1) StampHolder/SchemaHolder

これまで,DiagnosisDocumentTableModelTextComponentUndoManager で,病名編集とカルテ編集を undo できるようにしていたが,その他もろもろの機能は undo できないままであった。今回がんばって undo 機能をいろいろつけてみた。

まずは StampHolder/SchemaHolder の undo 対応をプログラムした。StampHolder/SchemaHolder のモデル更新を updateModel() というメソッドで実行するようにして,ここを AbstractComponentHolder の undoableUpdateModel() メソッドでフックして,StampHolder/SchemaHolder からここを呼んで undo 情報をとる方式にした。具体的な undo 処理は AbstractComponentHolder で行うことにより,StampHolder/SchemaHolder の両方の undo ができるようになった。

Componentholder

« 2020年6月 | トップページ | 2020年9月 »