Простой вопрос:
Может ли поворотная рама быть полностью модальной (блокировать все остальные окна)?
Я пробовал следующее, но все еще могу щелкать окна других приложений (например, этот браузер)
JDialog myDialog = ....
myDialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
Пожалуйста, вставьте код, если это возможно.
@ Mistre83, что тогда было невозможно, и я предполагаю, что это до сих пор невозможно. Итак, нет, я не нашел решения.




Я не знаю о глобальных модальных окнах, но вот идея.
Поскольку рабочий стол является фальшивым снимком экрана, вы можете игнорировать любую попытку щелкнуть по нему.
private void toggleFullScreenWindow() {
GraphicsEnvironment graphicsEnvironment
= GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice graphicsDevice
= graphicsEnvironment.getDefaultScreenDevice();
if (graphicsDevice.getFullScreenWindow()==null) {
dialog.dispose(); //destroy the native resources
dialog.setUndecorated(true);
dialog.setVisible(true); //rebuilding the native resources
graphicsDevice.setFullScreenWindow(dialog);
}else{
graphicsDevice.setFullScreenWindow(null);
dialog.dispose();
dialog.setUndecorated(false);
dialog.setVisible(true);
dialog.repaint();
}
requestFocusInWindow();
}
К вашему сведению: API полноэкранного эксклюзивного режима.
ммм ... может быть .. может быть .. Я попробую и посмотрю, не моргнет ли. Спасибо.
Зачем вы так обманываете своих пользователей?
JFrame не предназначен для работы в модальном режиме. Используйте для этого JDialog, но при этом вы потеряете некоторые функции JFrame. Если вы не можете смириться с потерей, вам нужно заблокировать EventQueue и заменить его своим, чтобы принимать события только от блокирующего.
См. Создание модальных внутренних рамок для объяснения использования внутренних фреймов, которые также должны быть применимы к JFrame.
Редактировать: Упс, мой ответ кажется немного неправильным, поскольку ваш пример кода показывает, что вы уже используете для этого подкласс Dialog.
Виноват. Я не ставил код инициализации. Да, я начал с JFrame, затем немного погуглил и переключился на JDialog. Дело здесь не в том, чтобы блокировать окна приложений, а во всех окнах ОС.
Диалоги не должны быть глобально модальными. Каждая современная ОС настоятельно не одобряет глобальную модальность в своей HIG, и они, возможно, даже не рекомендуют эту функциональность (на что указывает тот факт, что вы не можете заставить ее работать). Ваше приложение должно никогда красть события из всей системы; это не только плохой дизайн, это почти преступление в моей книге.
Игнорируя тот факт, что большинству людей нравится выполнять несколько задач между несколькими приложениями, как насчет сценария, когда вы открываете глобально модальное диалоговое окно, а затем ваше приложение зависает? Ctrl + Alt + Del должен работать в Windows, чтобы убить приложение, но я не уверен в Cmd + Opt + Escape на Mac с глобально модальным диалоговым окном (имеет ли Cocoa даже глобальную модальность имеют?). Ни на одной из платформ Linux нет хорошего способа убить приложения, которые взяли на себя полный контроль над пользовательским интерфейсом, как вы предлагаете (вам придется полностью убить X11 и запустить новый экземпляр с нуля).
Мой ответ: найди другой способ. Мне все равно, что просит ваш клиент, они этого не хотят.
вы нашли решение для этого? Мне это тоже нужно. Глобальный диалог, блокирующий любое взаимодействие с пользователем. Мне это нужно, потому что я создаю предупреждение, которое пользователь ДОЛЖЕН просмотреть и закрыть