Java 5 — вывод модального диалога на передний план при любом нажатии

#java #swing #focus #modal-dialog #jdialog

#java #swing #фокус #модальный диалог #jdialog

Вопрос:

Настройка: Java 5 — обновление невозможно.

У меня есть большое приложение, в котором есть несколько модальных диалоговых окон. Я слышал, что скрытые модальные диалоги могут привести к тому, что неосведомленные пользователи зайдут так далеко, что перезагрузят свой компьютер. Даже если пользователь знает, как ALT-TAB (по крайней мере, в MS Windows), это боль. Насколько я понимаю, это было частично исправлено в более поздних версиях Java, но, к сожалению, здесь это не вариант.

Итак, есть ли какой-либо способ принудительно отобразить модальный диалог при нажатии на какую-либо часть запущенного приложения? Я думал, что это может иметь какое-то отношение к MouseListeners, GlassPanes или чему-то еще. Тем не менее, у меня есть куча других вещей, над которыми я должен работать, поэтому у меня не так много времени, чтобы посвятить хэшированию этого прямо сейчас. Кто-нибудь может указать мне правильное направление?

Большое спасибо!

Комментарии:

1. какой тип по модальности, 1) setModal(true) 2) ModalityType(some from API) но для реальной помощи вы должны опубликовать sscce.org , потому что (может быть, я ошибаюсь) Я не знаю других проблем с фокусом в Java5 или Java6

2. setModal(true) . ModalityType отсутствует в Java5 (только 6 и более поздние версии)

3. Если никто не знает, с чего я могу начать поиск решения, я опубликую SSCCE завтра … нужно бежать и делать работу сейчас…

4. если вы добавлены в Java6, то этот метод не может решить вашу проблему, вы пробовали — что происходит, когда вы добавляете / удаляете / изменяете setModal(true) динамически, установите для этого значение required JDialog, это было бы проще и проще всего

5. SSCCE — создание JFrame с двумя JDialogs, которые управляют двумя JButtons

Ответ №1:

Итак, есть ли какой-либо способ принудительно отобразить модальный диалог при нажатии на какую-либо часть запущенного приложения?

При создании диалогового окна вам необходимо указать родительский фрейм в качестве владельца диалогового окна. Затем всякий раз, когда вы нажимаете на фрейм, также будет отображаться любой дочерний диалог.

Комментарии:

1. К сожалению, для диалога требуется родительский фрейм или диалог, который в контексте проблемы недоступен. Диалоговое окно отображается классом, содержащим JPanel, который добавляется в JTabbedPane, который затем помещается в JFrame…

2. Если только нет способа найти верхний фрейм JComponent, но я не знаю, как это сделать…

3. см.: SwingUtilities.windowForComponent(…).