« ダブルクリックでスタンプ入力2 | トップページ | 待ち人数のバッジ表示 »

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 のバックグランドが黒になってしまうことも判明して対応した。

« ダブルクリックでスタンプ入力2 | トップページ | 待ち人数のバッジ表示 »

OpenDolphin」カテゴリの記事