Свинг-фокус - PullRequest
       52

Свинг-фокус

0 голосов
/ 04 апреля 2010

В моем приложении у меня есть рамка с панелью инструментов (панель инструментов содержит некоторые действия). Я хочу, чтобы панель инструментов была видна только тогда, когда окно сфокусировано. Итак, я зарегистрировал windowFocusListener на окне. Проблема в- когда окно не сфокусировано, и я нажимаю на место, где должно быть действие панели инструментов - действие выполняется. Это происходит потому, что WindowFocusGained вызывается до того, как кнопка мыши отпущена, а когда кнопка мыши отпущена, она вызывает actionPerformed.

У кого-нибудь есть идея обойти эту проблему? Кто-нибудь знает, как определить, нажата ли кнопка мыши сейчас?

Ответы [ 2 ]

0 голосов
/ 07 апреля 2010

Теперь вы можете только скрыть панель инструментов, когда окно теряет фокус, но также отключить все кнопки с помощью setEnabled(false), а затем снова включить усиление фокусировки. Также можно синхронизировать setEnabled (..) с видимостью кнопок (вместо фокуса окна).

0 голосов
/ 04 апреля 2010

Вы можете добавить MouseListener в окно и проверить, видна ли панель инструментов в событии mousePressed.Если панель инструментов не видна во время нажатия мыши, установите флаг на панели инструментов (что-то вроде «ignoreNextAction»).

На панели инструментов установите этот флажок в обработчике событий actionPerformed.

Сброс флага панели инструментов в событии mouseReleased в окне, чтобы следующий щелчок работал правильно.

Это предполагает, что событие mouseReleased в окне происходит после действия actionPerformed на панели инструментовне уверен насчет этого).В худшем случае вы можете работать с таймером, который сбрасывает флаг через 50 мс после события мыши.

...