JDialog не отображается в полноэкранном режиме

У меня есть приложение, которое работает в полноэкранном режиме и работает нормально. Теперь мне нужно добавить простой, неокрашенный диалог, и у меня возникают проблемы. Если я запускаю приложение развернуто, но не в полноэкранном режиме, диалоговое окно отображается и функционирует, как и ожидалось. Когда я переключаюсь обратно в полноэкранный режим, диалоговое окно не отображается.

Диалог расширяет JDialog и содержит только JSlider и пару кнопок. Он не украшен и не модален. (Я отключил модальность для целей тестирования - было больно заставлять выходить из приложения каждый раз, когда диалог блокировал ввод.) Я вхожу в полноэкранный режим, используя setFullScreenWindow()Проходя в основной JFrame для приложения. Не имеет значения, если я установлю тот самый JFrame как владельца JDialog или нет. И, похоже, это не поможет, если я позвоню toFront() в диалоге.

Диалог кажется активным - тем более что он блокирует ввод, если я делаю его модальным, - но просто не отображается или скрывается. Итак, есть ли очевидный трюк для отображения JDialog в полноэкранном режиме? Что-то, что я мог бы пропустить или пропустить?

Если нет очевидного решения, я могу опубликовать код позже. К сожалению, сейчас у меня нет времени.

4 ответа

Решение

И на самом деле, как упоминал M1EK в своем ответе и я упомянул в комментарии, приложения Java в полноэкранном режиме не позволяют другим окнам отображаться поверх них. API Javadoc для GraphicsDevice гласит:

Windows не может перекрывать полноэкранное окно. Все остальные окна приложения всегда будут отображаться под полноэкранным окном в Z-порядке.

В итоге я перенастроил свое приложение так, чтобы оно не переходило в полноэкранный режим, пока немного позже. Это все еще дает мне довольно классную презентацию в начале и позволяет моему JDialog функционировать так, как должно. Переход в полноэкранный режим происходит быстро и плавно, даже в "середине" моего приложения.

Методы JOptionPane.showInternalXXXDialog() отображают диалоги как JInternalFrames. Может быть, вы могли бы рассмотреть возможность использования JIternaFrame для имитации диалогового окна.

Попробуй нам это. Это не эксклюзивный полноэкранный режим, но он достаточно близко.

setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);

Вы действительно хотите быть в полноэкранном режиме для этого приложения? Это больше игровая функция - я всегда думал, что для получения более прямого доступа к кадровому буферу. Вы читали этот урок:

http://java.sun.com/docs/books/tutorial/extra/fullscreen/index.html

На самом деле мне кажется, что это не лучший выбор для приложения Swing с дочерними окнами.

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