« 2016年11月 | トップページ | 2017年1月 »

2016年12月

2016年12月16日 (金)

ウインドウのデザイン変更

JavaFX では,Stage.UNIFIED でタイトルバーと内容が連続したウインドウを作ることができる。

Dolphin2

これを Swing でもできないかとずっと悩んでいたのだが,先日ふと見た Web ページで,JFrame に
getRootPane().putClientProperty("apple.awt.brushMetalLook", Boolean.TRUE);
とするとできることが分かった。早速,これを使ってデザインを変更した。上が変更前,下が変更後。

Dolphin

コマンドボタン等をのせるパネル (HorizontalPanel) の背景色を Window activate/deactivate に合わせて変えて,タイトルバーと連続するようにしたのだが,アプリケーション切り替えのタイミングによっては,バックグランドに回っているのに Window activate のイベントが送られてくることがあった。そうなると,タイトルバーは inactive なのに,それに連続するパネルが active になっているという間抜けな状態になる。

Fail

試行錯誤の結果,com.apple.eawt.AppEventListener を使って無理矢理ごまかした。
追記
quaqua を外すと,window active / deactive 時のパネルの色変更を aqua laf 側でしてくれることが判明したため,quaqua の PanelUI を exclude した。これで, AppForegroundListener を使った workaround は不要になった。しかし,quaqua の PanelUI は TitledBorder の表示もしていたため,自前で TitledBorder を作って対応した。また,JOptionPane の container のバックグランドが黒になってしまうことも判明して対応した。

2016年12月11日 (日)

ダブルクリックでスタンプ入力2

スタンプ箱からダブルクリックでスタンプを入力する方法がかなり気に入ったので,他のカルテのスタンプも入力できるようにした。
  • static 変数 "ChartImpl.allCharts","EditorFrame.allEditorFrames" の List に,ウインドウが activate された順番を保持するようにした。つまり,List の先頭をとると一番手前のウインドウが取れるようにした。
  • これを利用して,ダブルクリックで,一番手前のウインドウにスタンプが挿入されるようにした。スタンプ箱のスタンプと,Viewer のカルテのスタンプをダブルクリックすると,DiagnosisDocument あるいは入力中の EditorFrame にスタンプが入力される。
  • ダブルクリックしてからドラッグしてしまうと,スタンプが両方のイベントを受けてしまうので,ダブルクリック後 50 ms 以内にマウスが動いたら,ダブルクリックのイベントはキャンセルするようにした。
  • 編集中の EditorFrame のスタンプをダブルクリックした場合は,これまで通りスタンプエディタが立ち上がる。
  • 病名入力の場合は,「左右」「の疑い」などの修飾語を,ダブルクリック入力直後にショートカットで入力できるようにした。これまでは「ドラッグ&ドロップ→病名選択→ショートカットキー」だったのが,「ダブルクリック→ショートカットキー」で入力できるようになった。
自分だけ使うなら,こんな変な入力方法に改造してもOK。(変更部分まとめ

« 2016年11月 | トップページ | 2017年1月 »