Как показать всплывающее окно на другом? - PullRequest
1 голос
/ 22 марта 2011

В моем приложении на каком-то экране я запускаю всплывающее окно.Зависит от того, на какую кнопку пользователь нажмет это всплывающее окно, нужно запустить другое всплывающее окно.Я использую объект JDialog для реализации этих всплывающих окон.Проблема в том, что второе всплывающее окно не отображается (хотя используется setVisible (true) и toFront ()).Он создан, но я его не вижу.Я определил в его конструкторе первое всплывающее окно как его владельца.Кто-нибудь может помочь?

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Когда JDialog открывается из родительского окна или диалогового окна и устанавливается в модальное состояние, поток обработки событий для родительского окна останавливается. Это препятствует тому, чтобы родитель был сосредоточен или передал другие события, или по существу сделал что-нибудь, пока модальное диалоговое окно не закрыто. Поэтому вызов блокирует .

Вместо этого вы должны запустить событие из другого места, например, новый диалог вместо родительского окна, ИЛИ вместо модальных диалогов, использовать обычный JFrame и установить его всегда сверху, используя * 1007. *. Это означает, что пользователь может продолжать использовать родительское окно, и события по-прежнему будут запускаться из него.

Приложение: в ответ на вашу проблему «программа концентрируется на показе его и не реагирует на событие, которое должно его скрывать»: когда вы создаете модальное диалоговое окно, как только вы делаете его видимым, оно блокируется родительское окно, пока оно не будет закрыто, включая запуск событий. Если вам нужно, чтобы новое всплывающее окно закрывалось программно, вам нужно или сделать немодальное всплывающее окно, или вам нужно выполнить последующий код в контексте нового всплывающего окна (например, запустить событие, когда оно становится видимым)

1 голос
/ 23 марта 2011

ОК, теперь мне удалось показать второе всплывающее окно. Код в событии, которое вызывает всплывающее окно:

printingWindow.setLocationRelativeTo(null);
printingWindow.toFront();
printingWindow.setModal(true);
printingWindow.pack();
printingWindow.setVisible(true);

Но теперь у меня другая проблема:

, когда параметр PrintingWindow установлен на видимость, программа концентрируется на его отображении и не реагирует на событие, которое должно его скрыть.

Код, который выполняется при запуске соответствующего события:

printingWindow.setVisible(false);
printingWindow.dispose();

Так как же закрыть это всплывающее окно (запустив событие)?

...