JDialog перед своим родителем JFrame - PullRequest
3 голосов
/ 14 сентября 2010

Я хочу создать в Java Swing JDialog, который, когда он открыт, не может получить доступ к его родительскому окну (так же, как при открытии диалогового окна проводника в Microsoft Word).Есть ли метод в классе JDialog, который обеспечивает такое поведение?

Ответы [ 4 ]

6 голосов
/ 14 сентября 2010

используйте JDialog.setModal (true) перед отображением диалогового окна настроек

JDialog yourdialog = ...

yourdialog.setModal(true);
...

yourdialog.setVisible(true);
3 голосов
/ 14 сентября 2010

У вас есть два варианта:

Используйте статические методы в JOptionPane.Это создаст модальные диалоги по умолчанию:

Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel);
JOptionPane.showMessageDialog(parentWindow, "Hello, World); // Create modal dialog aligned with parent window.

Создайте JDialog явно:

Window parentWindow = SwingUtilities.getWindowAncestor(parentPanel);
JDialog dlg = new JDialog(parentWindow, ModalityType.APPLICATION_MODAL);

Первый вариант намного проще, и я предпочитаю его особенно в модальных диалогах.

1 голос
/ 11 июня 2012

У Адамски и Яна уже есть правильные ответы, но я просто хотел убедиться, что концепция модального окна объяснена.

ОП спросил о диалоге, который блокирует доступ к родителю. Это называется модальным диалогом (или модальным окном). Википедия дает это определение :

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

Таким образом, «модальное» означает, что оно заблокирует родительские окна (пользователи не могут взаимодействовать ни с каким окном, кроме модального окна), тогда как «немодальное» или «немодальное» означает, что дочернее и родительское окна будут доступны в в то же время.

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

0 голосов
/ 11 июня 2012

как насчёт блокировки JDialog внутри его JFrame Parent?Это правда, что использование JDialog.setModal способно сделать jdialog, как диалоги в других приложениях.остановлен весь кадр до закрытия jDialog

...