0

私のアプリはダイアログをポップアップします。ユーザーは通常、このダイアログとアプリケーション ウィンドウをしばらくの間、行ったり来たりしたいと考えています。このダイアログを一番上に置いて、メイン アプリケーション ウィンドウの後ろに隠れないようにします。しかし同時に、しばらく必要がない場合に邪魔にならないように、ダイアログに最小化ボタンを付けたいと思います。

これが私が試したことです:

  • モードレス JDialog を使用します。ダイアログはうまく前面に表示されますが、最小化ボタンがなく、独自のタスクバー ボタンもありません。

  • JFrame を使用します。ダイアログには最小化ボタンと独自のタスクバー ボタンがありますが、メイン ウィンドウがフォーカスされると、ダイアログはその後ろに隠れます。

  • JFrame を使用し、ダイアログに WindowListener.windowDeactivated() { this.toFront() } を追加します。これの問題は、 toFront() もフォーカスを設定するため、奇妙なフォーカスのちらつき効果が得られることです。

  • setAlwaysOnTop で JFrame を使用する - これが最も近い解決策ですが、ウィンドウは私のアプリケーションだけでなく、他のすべてのアプリケーションの上に表示されます。

フォーカスを変更せずに toFront が JFrame を前面に持ってくるだけなら簡単ですが、残念ながらそうではありません。JFrame の Z オーダーを変更する別の方法はありますか?

編集:JDialogを「ロールアップ」する簡単な方法、つまりタスクバーではなく最小化する方法があれば、それも私の問題を解決することに気づきました。

4

1 に答える 1

0

フレームでfocusGainedイベントをリッスンし、その時点でダイアログでsetZOrder / toFrontを使用してみませんか?(これが機能するかどうかはわかりませんが、一見の価値があります)。

于 2009-10-13T19:25:17.773 に答える