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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Закрыть диалог по Esc 
:(
    Опции темы
Zandr
Дата 11.3.2005, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нужно закрыть диалог (dialog.dispose()) если юзер жмет Escape, независимо от того, какой компонент на этом диалоге имеет фокус ввода. Следующее решение мне не очень нравится...
Код

public class StorageRecordViewer extends JDialog {

    public StorageRecordViewer() {
        ...
        AWTEventListener l = new AWTEventListener() {
            public void eventDispatched(AWTEvent event) {
                if (((KeyEvent) event).getKeyCode() == KeyEvent.VK_ESCAPE) {
                    dispose();
                }
            }
        };
        Toolkit.getDefaultToolkit().addAWTEventListener( l, AWTEvent.KEY_EVENT_MASK);
    }
    ...
}


Это сообщение отредактировал(а) Zandr - 11.3.2005, 13:45
PM MAIL   Вверх
Zandr
Дата 11.3.2005, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хотя с другой стороны можно попробовать единожды завести листенер (например при инициализации GUI), который будет диспозить все JDialog'и, если на них нажать Esc:
Код

...
        AWTEventListener l = new AWTEventListener() {
            public void eventDispatched(AWTEvent event) {
                if (((KeyEvent) event).getKeyCode() == KeyEvent.VK_ESCAPE) {
                    Object source = e.getSource();
                    if (source != null && source instanceof JComponent) {
                        Container c = ((JComponent) source).getTopLevelAncestor();
                        if (c instanceof JDialog) {
                            ((JDialog) c).dispose();
                        }
                    }
                }
            }
        };
        Toolkit.getDefaultToolkit().addAWTEventListener( l, AWTEvent.KEY_EVENT_MASK);
...

Остановлюсь пока на этом... Хотя если есть более заточенные под этот случай методы - буду рад посмотреть smile И как топ-левел контейнеру все-таки ловить события пойманные компонентами на нем?

Это сообщение отредактировал(а) Zandr - 11.3.2005, 14:18
PM MAIL   Вверх
AntonSaburov
Дата 11.3.2005, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Может проще тогда сделать свой класс от JDialog, который будет реагировать на клавишу Esc ?
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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