カスタム CSS レンダリングを使用して Swing アプリケーションを開発しています。システムの一部として JDialogs も使用していますが、ダイアログの外にある特定のコンポーネント (緊急ボタン) にアクセスする必要があります。
このために、次の方法を選択しました。
- すべてのダイアログは非モーダルです。準モーダルにしたいものは、setAlwaysOnTop になります。
- 準モーダル ダイアログが常に 1 つ表示されます。この場合、このダイアログの下に別のダイアログを表示し、フルスクリーンで半永久的に表示します。
- この「ぼかし」ダイアログは、画面全体をカバーし、マウス イベントをキャッチして、緊急ボタンのみに転送します。並行して、緊急ボタンが半永久的な表面から影響なく見えるように、隙間を開けました。
- ぼかしダイアログはフォーカスしたりアクティブにしたりすることはできません (これには拒否可能なリスナーがあります)
何かが起こり、ぼやけたダイアログが私の準モーダルダイアログを覆っているように見えるまで、すべてがうまくいきます。ただし、外部アプリケーション ウィンドウをその上に移動すると、準モーダル ダイアログが上部に残ります。複雑な説明の代わりに、次のリンクの画像を参照してください: http://lost.lost.hu/javascreen.png
これまでのところ、再描画、イベント、すべてをデバッグしようとしましたが、これを引き起こすものは何も見つかりませんでした. 特に、上に示したケースは、ここで何が起こっているのかを理解するのに私を悩ませます。
この現象を取り除くために、最近 Java 1.7 に更新しましたが、今日は戻ってきました。