| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: GUI и Java FX приложения > KeyListener на JPanel |
| Автор: MrLjaO 26.4.2006, 11:39 |
| Как повесить KeyListener на панель? просто так повесив листенер на панель он не работает. Если добавить на панел кнопку - то при нажатии на неё (фокус на кнопке) KeyListener на панели срабатывает , но если у меня на панели только Лабле - как мне быть? |
| Автор: Ortega 26.4.2006, 11:55 | ||||
someAction - что должно происходить по событию someKeyStroke - комбинация клавиш, которая инициирует действие. Нямс, удобнее всего получать keyStroke следующим образом:
Если сразу не сработает, попрбуй поиграться с условием получения InputMap. Варианты: WHEN_IN_FOCUSED_WINDOW, WHEN_FOCUSED, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT |
| Автор: MrLjaO 26.4.2006, 12:38 |
| Признаться не совсем понятно что такое key, someAction. Затдача такова на аплете несколько панелей .. при нажатии мышкой на одну из панелей если мы нажимаем затем клавишу F1 - грузиться Help. В каком виде не важно .. просто идёт некая процедура. мне не совсем понятна работы пары panel.getActionMap().put(key, someAction); panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(someKeyStroke, key); и как собственно взаимодействуют Key и SomeAction Где идёт отлов "фокуса" и нажатия? |
| Автор: MrLjaO 26.4.2006, 13:32 | ||
| Да .. рабоает ... )) За это спасибо )) НО Во превых . при данном раскладе - не зависимо то того , было ли на жатие на панель срабатывает листенер (тоесть ему грубо говря побоку на какую панель мы кликнули последний раз или даже кликали ли вообще) Во вторых если мы сделали 2 панели и на них обоих повесили "листенеры" данным способом - срабатывает последний повешаный Action. Вот упрощённый код моего проекта
|
| Автор: Ortega 26.4.2006, 13:51 |
| JComponent.WHEN_IN_FOCUSED_WINDOW замени на JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT или JComponent.WHEN_FOCUSED. Не уверен, что именно сработает |
| Автор: MrLjaO 27.4.2006, 10:25 |
| Попробовал варианты WHEN_IN_FOCUSED_WINDOW, WHEN_FOCUSED, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT WHEN_ANCESTOR_OF_FOCUSED_COMPONENT - работает .. но только тогда когда какой то компанент на панели "держит фокус". Тоесть если кинуть кнопку и нажать на неё (взять фокус)- то будет работать .... Но если кликнуть на Jlable то не работает ... по прежнему мучаюсь - ничег не выходит .... |
| Автор: MrLjaO 27.4.2006, 11:38 | ||||
| Ну вот! Разобрался ! Кому интересна эта тема .. или столкнулся с таким же .. читайте ниже. Добиться нужного эфекта через
Мне к сожаленю не удалось .. поэтому воплотил я этот замысел следующим образом. Просто так (нажатием мышкой ) панели фокус не передашь (если конечно она не содержит сомпонентов ... "могущих" держать фокус . Поэтому делаем следующим образом -
Всё работает .. проверено. |
| Автор: Ortega 27.4.2006, 11:39 | ||
Попробуй так
|