Минимизируемый JFrame, который остается поверх главного окна приложения

Мои приложения выскакивают диалог. Пользователи обычно хотят переключаться между этим диалоговым окном и окном приложения на определенный период времени. Я хочу, чтобы это диалоговое окно оставалось сверху, чтобы оно не скрывалось за основным окном приложения. Но в то же время я хочу, чтобы в диалоге была кнопка сворачивания, чтобы он мог убираться с дороги, если он не нужен некоторое время.

Вот что я попробовал:

  • используйте немодальный JDialog - диалоговое окно приятно впереди, но у него нет кнопки свертывания, а также нет собственной кнопки панели задач

  • использовать JFrame - в диалоговом окне теперь есть кнопка свертывания и собственная кнопка панели задач, но когда основное окно получает фокус, диалоговое окно скрывается за ним.

  • используйте JFrame и добавьте WindowListener.windowDeactivation () { this.toFront() } в диалоговом окне. Проблема в том, что toFront () также устанавливает фокус, так что вы получаете странный эффект мерцания фокуса.

  • использовать JFrame с setAlwaysOnTop - это самое близкое решение, но теперь окно останется поверх всех других приложений, а не только моего приложения.

Было бы легко, если бы toFront просто вывел JFrame на передний план, не меняя фокус, но, к сожалению, это не так. Есть ли другой способ изменить Z-порядок JFrame?

редактировать: мне просто пришло в голову, что если бы был простой способ "свернуть" JDialog, то есть свести его к минимуму, но не на панели задач, это решило бы и мою проблему.

1 ответ

Почему бы не прослушать событие focusGained в кадре, а затем использовать setZOrder/toFront в диалоговом окне в этой точке? (Не уверен, что это будет работать, но стоит попробовать).

Другие вопросы по тегам