Я хочу создать в Java Swing JDialog, который, когда он открыт, не может получить доступ к его родительскому окну (так же, как при открытии диалогового окна проводника файлов в Microsoft Word). Есть ли какой-либо метод в классе JDialog, который обеспечивает такое поведение?JDialog перед его родителем JFrame
ответ
использование JDialog.setModal (истина) перед установкой диалога видимую
JDialog yourdialog = ...
yourdialog.setModal(true);
...
yourdialog.setVisible(true);
У вас есть два варианта:
Используйте статические методы в 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);
Первый вариант намного проще, и я, как правило, предпочитают его особенно с модальными диалогами.
как насчет блокировки JDialog внутри его родителя JFrame? Это правда, что с помощью JDialog.setModal можно сделать jdialog так же, как диалог в другом приложении. остановил все рамки до того, как jDialog закрылся
Кажется, у вас есть ответ, который немного отличается от других, но это не очень понятно. Я не совсем понимаю, что вы подразумеваете под «блокировкой» JDialog внутри своего родителя. Не могли бы вы объяснить свою идею еще немного? – RustyTheBoyRobot
Адамски и Ян оба уже имеют правильные ответы, но я хотел просто убедиться, что концепция модального окна объясняется.
ОП задал вопрос о диалоге, который блокирует доступ к родительскому объекту. Это называется модальным диалогом (или модальным окном). Википедия дает this definition:
В дизайне пользовательского интерфейса, модальное окно является окном ребенка, который требует, чтобы пользователей взаимодействует с ним, прежде чем они смогут вернуться к работе с родительским приложением
Таким образом, «модальный» означает что он блокирует родительские окна (пользователи не могут взаимодействовать с каким-либо окном, кроме модального окна), в то время как «немодальный» или «немодальный» означает, что дочерние и родительские окна будут доступны одновременно.
Это концепция, которая существует в инфраструктурах GUI в целом, а не только для структуры Swing. В любой графической среде, которую вы используете, вы, вероятно, можете найти такую функциональность, ища свойство modal
.
или использовать один из конструкторов JDialog, который определяет модальность. – Qwerky