![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| MrLjaO |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.3.2006 Где: Minsk Репутация: нет Всего: нет |
Как повесить KeyListener на панель?
просто так повесив листенер на панель он не работает. Если добавить на панел кнопку - то при нажатии на неё (фокус на кнопке) KeyListener на панели срабатывает , но если у меня на панели только Лабле - как мне быть? |
|||
|
||||
| Ortega |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 1 Всего: 6 |
someAction - что должно происходить по событию someKeyStroke - комбинация клавиш, которая инициирует действие. Нямс, удобнее всего получать keyStroke следующим образом:
Если сразу не сработает, попрбуй поиграться с условием получения InputMap. Варианты: WHEN_IN_FOCUSED_WINDOW, WHEN_FOCUSED, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT Это сообщение отредактировал(а) Ortega - 26.4.2006, 11:57 --------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
||||
|
|||||
| MrLjaO |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.3.2006 Где: Minsk Репутация: нет Всего: нет |
Признаться не совсем понятно что такое key, someAction.
Затдача такова на аплете несколько панелей .. при нажатии мышкой на одну из панелей если мы нажимаем затем клавишу F1 - грузиться Help. В каком виде не важно .. просто идёт некая процедура. мне не совсем понятна работы пары panel.getActionMap().put(key, someAction); panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(someKeyStroke, key); и как собственно взаимодействуют Key и SomeAction Где идёт отлов "фокуса" и нажатия? |
|||
|
||||
| Ortega |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 1 Всего: 6 |
Раз нажатие мышкой - значит нужно условие WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
key - это некий ключ, например, строка, который будет идентифицировать экшн. key нужен для того, чтобы при срабатывании комбинации, описанной keyStroke'ом компонент мог вытащить из ActionMap'а action и вызвать его метод actionPerformed(...). Допустим, Help грузится с помощью метода help() той же панели. Тогда someAction может иметь такой вид:
а приведенный мною код выглядеть примерно так:
Вся прелесть в том, что это происходит на уровне самой панели и об этом заботиться не нужно. --------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
||||||
|
|||||||
| MrLjaO |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.3.2006 Где: Minsk Репутация: нет Всего: нет |
Да .. рабоает ... )) За это спасибо ))
НО Во превых . при данном раскладе - не зависимо то того , было ли на жатие на панель срабатывает листенер (тоесть ему грубо говря побоку на какую панель мы кликнули последний раз или даже кликали ли вообще) Во вторых если мы сделали 2 панели и на них обоих повесили "листенеры" данным способом - срабатывает последний повешаный Action. Вот упрощённый код моего проекта
|
|||
|
||||
| Ortega |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 1 Всего: 6 |
JComponent.WHEN_IN_FOCUSED_WINDOW замени на JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT или JComponent.WHEN_FOCUSED. Не уверен, что именно сработает
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
|||
|
||||
| MrLjaO |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.3.2006 Где: Minsk Репутация: нет Всего: нет |
Попробовал варианты WHEN_IN_FOCUSED_WINDOW, WHEN_FOCUSED, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
WHEN_ANCESTOR_OF_FOCUSED_COMPONENT - работает .. но только тогда когда какой то компанент на панели "держит фокус". Тоесть если кинуть кнопку и нажать на неё (взять фокус)- то будет работать .... Но если кликнуть на Jlable то не работает ... по прежнему мучаюсь - ничег не выходит .... |
|||
|
||||
| MrLjaO |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 30.3.2006 Где: Minsk Репутация: нет Всего: нет |
Ну вот! Разобрался ! Кому интересна эта тема .. или столкнулся с таким же .. читайте ниже.
Добиться нужного эфекта через
Мне к сожаленю не удалось .. поэтому воплотил я этот замысел следующим образом. Просто так (нажатием мышкой ) панели фокус не передашь (если конечно она не содержит сомпонентов ... "могущих" держать фокус . Поэтому делаем следующим образом -
Всё работает .. проверено. |
||||
|
|||||
| Ortega |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 115 Регистрация: 5.11.2005 Где: Харьков, Украина Репутация: 1 Всего: 6 |
Попробуй так
--------------------
Всему свое время (с) ЧайфНе парься, будь счастлив (с) Пеппи Длинный Чулок |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |