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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отследить событие нажатия клавиши 
:(
    Опции темы
access
Дата 6.6.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени всем.
Задача в общем-то простая: есть форма, нужно отследить нажатие клавиши F2.
Решение мне известно:
Код

KeyStroke ksSearch = KeyStroke.getKeyStroke("F2");
ActionListener actionSearch = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 // to do something
            }
        };
getRootPane().registerKeyboardAction(actionSearch, ksSearch, JComponent.WHEN_IN_FOCUSED_WINDOW);

Работает, конечно, но мне не нравится, что создаётся "лишний" ActionListener. У меня форма и так implements  от него. Как заюзать уже имеющийся?
Код

getRootPane().registerKeyboardAction(this, ksSearch, JComponent.WHEN_IN_FOCUSED_WINDOW);

Внутри делаю так:
Код

public void actionPerformed(ActionEvent e) {
        if (e.getSource()==button1)
        {
         }
        if (e.getSource()==button2)
        {
         }
...
}

Ну и сам вопрос: как внутри actionPerformed определить, что событие пришло от F2?
Спасибо.
PS: если на форуме есть ответ - намекните, но не нашёл - все решения вроде как с созданием листенера...
PM MAIL   Вверх
fixxer
Дата 6.6.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посмотрите классы

InputMap
ActionMap

ну и соответственно JComponent#getActionMap(), JComponent#getInputMap(int condition)


--------------------
user posted image
PM MAIL ICQ   Вверх
access
Дата 11.6.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



сделал так:
Код

        InputMap im;
        ActionMap am;
        im = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        am = getRootPane().getActionMap();
        im.put(KeyStroke.getKeyStroke("F2"), "History");
        Action history = new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("F2");
            }
        };
        am.put("History", history);

Если тыкнуть  куда-нибудь, например в JTable, то F2 не отлавливается (хотя изначально срабатывает, если нажать сразу при отображении формы). Пробовал все три варианта JComponent.WHEN_IN_FOCUSED_WINDOW 
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT 
JComponent.WHEN_FOCUSED - бесполезно.
Что интересно, если заменить на F3, то всё нормально работает. Но нужно F2 (так реализовано в прежней программе, чтобы не переучивались).
Есть у кого какие идеи?
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.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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