| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Апплеты > Модальный диалог |
| Автор: TrivialCore 4.11.2004, 17:11 |
| Суть проблемы следующая. Есть апплет, который при нажатии выполняет нечто, и это длится некоторое время, после чего в конце выскакивает модальный диалог, чтобы юзер подтвердил нажатием на "ОК". Так как операция длится дольше чем пару секунд, логично, что юзер на это время может переключиться на другое окно, чтобы не тратить время. Но после того, как операция закончена, при переключении юзера на окно с апплетом модальный диалог не высвечивается, хотя он есть и (что свойственно модальным окнам) блокирует работу главного окна. В результате юзер не может сделать ничего и остается в глубоких непонятках. Вопрос: как сделать, чтобы мой модальный диалог был видим при переключении/фокусе на браузер с апплетом? Надеюсь, что понятно обьяснил. Если нет, могу еще раз постарат;ся. |
| Автор: TrivialCore 4.11.2004, 18:31 |
| П.С. Какое же это веб-программирование? Если уж перемещать, то я бы переместил тему в GUI, т.к. это AWT/Swing-овая тема. |
| Автор: LSD 4.11.2004, 19:44 |
| В обычном приложении эта проблема решается, установкой родительского фрейма. Правда как поступить с апплетом, не знаю. |
| Автор: Domestic Cat 4.11.2004, 21:08 |
| Видимо никак, апплет веть в сандбоксе. Пока апплет это что-то делает, покажи юзеру чего-нибудь, тот же модальный диалог, но с прогресс баром. |
| Автор: TrivialCore 5.11.2004, 15:51 | ||||
Точно, можно указать родительский фрейм, но как его указать при его отсутствии (т.е. при отсутствии фреймов). Конечно, можно положить на апплет фрейм, которого единственной целью будет быть родителем для диалога, но - коряво! Родителем также может быть другой диалог, но тут та же проблема. |
| Автор: Alt 5.11.2004, 22:28 | ||
Можно попробовать так:
|
| Автор: polosatij 10.11.2004, 15:12 | ||||||
eto proishodit tol'ko v tom sluchae, esli u Dialog-a v konstruktore zadan true, to est'.. user OBJAZAN chto-libo sdelat' v Dialog-e..
iiii.. paint budet vsegda vyzyvat'sja, kogda user perekljuchaet okno (to est' delaet tvoj applett activnym) udachi |
| Автор: TrivialCore 14.11.2004, 02:29 |
| Звучит заманчиво, в понедельник попробую =) |
| Автор: TrivialCore 25.11.2004, 18:47 |
| Вот только дело в том, что в самом апплете я не имею указателя на диалог, т.к. он создается вообще далеко от ГУИ - через интерфейс... |
| Автор: LSD 25.11.2004, 21:21 | ||||
А там найдешь свой |
| Автор: TrivialCore 26.11.2004, 11:36 |
| Проблема в том, что диалог - это не фрейм, а аналога для диалогов или окон я найти не могу... |
| Автор: AntonSaburov 26.11.2004, 12:55 |
| Занятная задачка - надо поразмыслить на досуге. Ты только с форума не убегай быстро - вдруг решение аж через неделю придет |
| Автор: TrivialCore 26.11.2004, 13:16 | ||||||
=(( Добавлено @ 13:18
|
| Автор: Domestic Cat 26.11.2004, 17:37 | ||
а если фрейм никуда нe добавлять а просто держать ссылку на него? |
| Автор: TrivialCore 26.11.2004, 20:17 |
| Дело в том, что это работает следующим образом (я так думаю): Родитель для диалога нужен для того, чтобы определять, нужно ли высвечивать диалог. Когда все было спрятано, а потом родитель стал видимым (фокус на браузере), то также шлется сообщение диалогу - показаться. Если у диалога родителя нет, то соответственно и сообщение не шлется, диалог не отображается. И также если родителем будет некий фрейм, которого нет на апплете, то и его отображение/неотображение не будет связано с видимостью апплета/браузера. Я так себе это представляю. Если у кого есть более достоверное инфо, то милости прошу описать. |
| Автор: Domestic Cat 26.11.2004, 20:26 |
| Но ведь к самому апплету можно добавить FocusListener: http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Component.html#addFocusListener(java.awt.event.FocusListener) |
| Автор: LSD 26.11.2004, 20:30 | ||||
Ловкость рук и никакого мошенничевства
|
| Автор: Domestic Cat 26.11.2004, 20:53 | ||
Речь идет об апплетe пo-моему |
| Автор: LSD 26.11.2004, 21:25 | ||
Там смысл был в том чтобы перебрать все существующие Window. |
| Автор: TrivialCore 28.11.2004, 02:33 |
| LSD, в моем апплете нет ни одного Frame =( Поэтому Frame.getFrames() не вернет ни одного... Добавлено @ 02:36 Domestic Cat, вроде дошло, с фокус лиснером должно заработать, в понедельник сделаю =) |
| Автор: LSD 28.11.2004, 19:44 | ||
Если есть диалог, то для него обязательно есть родительски фрейм. Даже если использовать new JDialog(), то все равно создается невидимый фрейм автоматом. |
| Автор: TrivialCore 29.11.2004, 18:55 | ||||
Как тут быть? |
| Автор: Domestic Cat 29.11.2004, 19:13 |
| Попробуй тогда через определенные промежуткi времени вызывat' нa диалогe show(), по таймеру например. |
| Автор: LSD 29.11.2004, 19:37 | ||
А ты мой код смотрел? |
| Автор: TrivialCore 29.11.2004, 19:43 |
| Ну смотрел вроде. Только не тестировал, но раз ты тестировал, значит работает? Ну тогда - круто. Просто решение от Alt-а, еще на первой странице, оказалось тоже тем, что надо. Метод возвращает некий Фрейм, в котором содержится апплет, и поэтому можно его установить как родителя =) |