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

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

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

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

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


person Clayton    schedule 12.11.2009    source источник
comment
О, о. Для меня это не сулит ничего хорошего: Windows не может перекрывать полноэкранное окно. Окна всех других приложений всегда будут отображаться под полноэкранным окном в Z-порядке. Из API для GraphicsDevice: java.sun.com/j2se/1.4.2/docs/api/java/awt/   -  person Clayton    schedule 13.11.2009


Ответы (4)


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

person Ustaman Sangat    schedule 21.09.2010

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

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

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

person Clayton    schedule 13.11.2009

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

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

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

person M1EK    schedule 12.11.2009
comment
Хороший материал для размышлений, но да, полноэкранный режим является обязательным, согласно спецификации клиента. Это диалоговое окно будет единственным дочерним окном, поэтому в нем нет ничего сложного. - person Clayton; 13.11.2009
comment
В настоящее время является обязательным для моей клиентской спецификации. Если вы работаете в какой-либо производственной среде, полезно добавить это в свой набор инструментов. - person davidahines; 28.02.2011

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

setExtendedState(JFrame.MAXIMIZED_BOTH);
setUndecorated(true);
person Alex    schedule 07.02.2012