![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Есть некое окно для отображения графиков.
Ниже его полный код
Пытался прицепить листенер событий клавиатуры к разным объектам. Работает только если прицеплено к кнопке. Насколько я понимаю это потому, что только кнопка в данном окне может иметь фокус. У меня есть другое окно, в котором есть много разных компонентов, способных иметь фокус (кнопки, метки). Мне нужно, чтобы при нажатии PrtScr вызывался некий метод. Вопрос, к какому компоненту я должен прицепить слушателя событий клавиатуры? Очень не хочется цеплять ко всем компонентам. Подскажите, пожалуйста, как выбрать компонент, который слушать. -------------------- Mirkes |
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 2 Всего: 19 |
Попробуйте вот такое:
Причем для кода VK_PRINTSCREEN у меня событие KEY_PRESSED не приходило - только KEY_RELEASED. Говорят, специфика Windows. |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Спасибо, попробую.
-------------------- Mirkes |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Dummy, спасибо, все работает, только событие прилетает три раза. Это нормально?
-------------------- Mirkes |
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 2 Всего: 19 |
Вы имеете в виду, что postProcessKeyEvent дергается три раза? Это нормально: первый раз приходит событие KEY_PRESSED, второй - KEY_TYPED, третий - KEY_RELEASED.
Это сообщение отредактировал(а) Dummy - 29.3.2012, 14:55 |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Мне не жалко. Есть одна проблема - я попробовал отрезасть создание и открытие этого окна в отдельный проект и получил одиночный вызов. :(
Я могу сбросить весь апплет, он не секретный. Но там куча классов и т.д. Если готовы копаться напишите - сброшу. Пока собрался ответить, Ваш пост изменился. Событие в усеченной версии вызывается один раз. А в полной три. И все три - release. Это сообщение отредактировал(а) Mirkes - 29.3.2012, 17:17 -------------------- Mirkes |
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 2 Всего: 19 |
Скидывайте. Этот вопрос хочется до конца довести
|
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Отправил на личную почту. К сожалению отправить личным сообщением на форуме не получилось, поскольку к сообщению нельзя прицепить файл.
Причина именно тройного вызова метода установлена. У меня есть три экземпляра окна этого типа. Иногда они отображаются, иногда не все, иногда ни одного. Но они есть. Осталась мелочь - понять в каком окне была нажата кнопка PrintScreen. Наверное можно подняться от того компнента, который передается в событии и найти по дороге рамку. Прошу прощения за беспокойство, только сейчас сообразил добавить имя окна в отладочную информацию. Это сообщение отредактировал(а) Mirkes - 30.3.2012, 03:53 -------------------- Mirkes |
|||
|
||||
| Dummy |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 2 Всего: 19 |
Для получения фокусного окна можно использовать такое:
Чтобы узнать, какой конкретно элемент находится в фокусе:
|
||||
|
|||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 2 Всего: 17 |
Dummy, спасибо большое - помогло. Правда из головного апплета получением активного окна обойтись не удалось, пришлось идти к предку от активного компонента:
Это связано с тем, что при автономном запуске апплет вставляется во фрейм. И при указании активного окна указывается фрейм, а не апплет. Спасибо большое за помощь. Поставил +1 -------------------- Mirkes |
|||
|
||||
![]()
|
| Правила форума "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. |