« シェーマの拡大・縮小 | トップページ | 病名検索フィールドをカルテ検索と併用する »

2020年5月 6日 (水)

JWindow を使った JSheet

mac のダイアログは,タイトルバーのあたりからせり下がってくる Sheet という方式になっている。これを java でシミュレートするために,JDialog を undecorated にしたウインドウを使っていた。しかしこれには,JDialog が表示されると親フレームがフォーカスを失って,タイトルバーがグレーアウトされてしまうという,かっこよくない欠陥があった。

JDialog ではなく,JWindow を使えば,親フレームを active にしたままダイアログが出せるのであるが,JWindow を modal にする方法がわからず,ずっと pending になっていた。

時間があるときに JDialog のソースを読んで,modal をどのように実現しているのかを調べていたのだが,ついに SecondaryLoop というのを発見することができた。これを使って JWindow で modal な JSheet を作った。

左:JDialog によるもの,中:JWindow によるもの,右:アニメーションGIF

1_20200506120001  2_20200506120201  Jsheet

こういう,機能的にはどうでもよいことにこだわるのは,マカーのマカーたる所以である。

« シェーマの拡大・縮小 | トップページ | 病名検索フィールドをカルテ検索と併用する »

OpenDolphin」カテゴリの記事