Вопрос

Я хочу получать уведомления о событиях мыши (в частности, событиях входа и выхода мыши) на моем JFrame. Но когда я добавляю к нему курсор мыши, я получаю события на границах кадра, а не весь кадр с его содержимым.

Есть идеи, почему?

РЕДАКТИРОВАТЬ: Или, по крайней мере, у вас есть альтернатива? Я хочу "глобальный" способ ловить события мыши на JFrame. Может быть, список мыши не является ответом.

Это было полезно?

Решение

Вы можете получить все события и проверить, является ли их источник компонентом в JFrame.

См. Toolkit.addAWTEventListener

Другие советы

Существует невидимый компонент, который перекрывает весь графический интерфейс, "стеклянная панель". Вы можете присоединить своих слушателей к этому. Пример:

JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);

Если вы хотите, чтобы ваши перехваченные события проходили через нижележащие компоненты, вы можете переотправить их. Например:

public void mouseMoved(MouseEvent e) {
    redispatchMouseEvent(e, false);
}

Потому что содержимое (вероятно, JPanel) является "затенением" и потребляя события, и они не достигают JFrame.

Что вы можете сделать, это добавить одного и того же слушателя ко всем детям. Там должен быть лучший способ, хотя.

Альтернативой AWTEventListener является отправка EventQueue . Это дает преимущество в том, что апплеты и приложение WebStart могут это делать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top