2010-09-14 3 views
3

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

ответ

6

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

JDialog yourdialog = ... 

yourdialog.setModal(true); 
... 

yourdialog.setVisible(true); 
+0

или использовать один из конструкторов JDialog, который определяет модальность. – Qwerky

3

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

Используйте статические методы в 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); 

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

0

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

+1

Кажется, у вас есть ответ, который немного отличается от других, но это не очень понятно. Я не совсем понимаю, что вы подразумеваете под «блокировкой» JDialog внутри своего родителя. Не могли бы вы объяснить свою идею еще немного? – RustyTheBoyRobot

1

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

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

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

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

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

Смежные вопросы