Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание окна, "блокирующего" приложение. 
:(
    Опции темы
HugeX
Дата 2.8.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 19.9.2009

Репутация: нет
Всего: нет



Добрый день, уважаемые посетители форума!
У меня есть вопрос: как сделать окно на SWING, которое блокирует все приложение, т.е., пока не завершишь работу с этим окном, клики в области приложения вызывают "мигание" окна приложения и издается соответствующий звук в виндовс. Заранеен благодарен.
PM MAIL   Вверх
jk1
Дата 2.8.2010, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Код

JDialog dialog = new JDialog();
dialog.setModal(true);

или
Код

JDialog dialog = new JDialog();
 dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
HugeX
Дата 2.8.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 19.9.2009

Репутация: нет
Всего: нет



А если мне нужен объект не JDialog, а JFrame?
PM MAIL   Вверх
jk1
Дата 2.8.2010, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Прямого API для того, чтобы сделать JFrame модальным нет. Очевидно почему это так: у подавляющего большинства приложений одно окно с маркером на панели задач (или аналоге), все остальное - диалоги. Решение с несколькими окнами разной модальности как минимум озадачивает пользователя.

Если все же такое поведение необходимо, придется реализовывать его руками. Основными инструментами для это будут методы:
Код

frame.setAlwaysOnTop(true);
frame.toFront():
frame.toBack();


для перехвата кликов по любому другому окну можно задать ему GlassPane с обработчиком событий мыши:
Код

JFrame frame = new JFrame();
JPanel glass = new JPanel();
frame.setGlassPane(glass);
glass.addMouseListener(new MouseAdapter() {
     // перехват событий и передача фокуса на "модальное" окно
});


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


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Skipy
Дата 2.8.2010, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(HugeX @ 2.8.2010,  14:34)
А если мне нужен объект не JDialog, а JFrame?

А какая между ними визуальная разница?


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
jk1
Дата 2.8.2010, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Цитата

А какая между ними визуальная разница? 


Дело в кнопках минимизации и разворачивания на полный экран. В моей практике был случай, когда заказчика очень нервировало их отсутствие


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Skipy
Дата 3.8.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Простите, минимизировать диалоговое окно? Модальное? И что Вы потом будете с этим приложением делать?

И максимизировать его тоже не надо. Диалоговое окно на то и окно, что обычно его размер рассчитан по размерам содержимого. Какой смысл в максимизации? Вы себе гораздо больше проблем наживете с JFrame, мы в свое время с toFront/toBack намучались.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
jk1
Дата 3.8.2010, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Skipy,  
Да я с вами и не спорю  smile , потому что сам точно так же мучался с toFront/toBack. Коллега просил способ, я его описал. И честно предупредил при этом, что это а) непонятно зачем б) редкий гемморой в реализации.



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.