2010-04-04 1 views
0

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

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

ответ

0

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

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

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

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

0

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