#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 или Java62.
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(…).