MouseListener на JFrame
-
05-07-2019 - |
Вопрос
Я хочу получать уведомления о событиях мыши (в частности, событиях входа и выхода мыши) на моем JFrame. Но когда я добавляю к нему курсор мыши, я получаю события на границах кадра, а не весь кадр с его содержимым. Р>
Есть идеи, почему?
РЕДАКТИРОВАТЬ: Или, по крайней мере, у вас есть альтернатива? Я хочу "глобальный" способ ловить события мыши на JFrame. Может быть, список мыши не является ответом.
Решение
Вы можете получить все события и проверить, является ли их источник компонентом в JFrame.
Другие советы
Существует невидимый компонент, который перекрывает весь графический интерфейс, "стеклянная панель". Вы можете присоединить своих слушателей к этому. Пример: р>
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
Если вы хотите, чтобы ваши перехваченные события проходили через нижележащие компоненты, вы можете переотправить их. Например:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
Потому что содержимое (вероятно, JPanel) является "затенением" и потребляя события, и они не достигают JFrame. Р>
Что вы можете сделать, это добавить одного и того же слушателя ко всем детям. Там должен быть лучший способ, хотя. Р>
Альтернативой AWTEventListener
является отправка EventQueue
. Это дает преимущество в том, что апплеты и приложение WebStart могут это делать.