Определить событие перемещения мыши на JPanel - PullRequest
0 голосов
/ 14 мая 2009

У меня есть JPanel, который я хотел бы обнаружить следующие события

(1) Когда мышь перемещается в

(2) Когда мышь выдвигается

(1) быстро легко. (2) немного сложнее. В настоящее время я должен зарегистрировать событие во всех компонентах вокруг JPanel. Если сосед в окрестностях JPanel обнаружил движение мыши по событию, это также означает, что JPanel находится в (2) ситуации. Тем не менее, это довольно грязно, так как я добавляю новые компоненты в будущем, этот грязный обходной путь сломается.

Другой способ - использовать таймер для контроля JPanel. Если позиция мыши не находится в пределах JPanel в течение x секунд, я могу считать, что JPanel вызывает событие перемещения мыши.

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

Есть ли лучший способ, который может предоставить платформа Java?

1 Ответ

6 голосов
/ 14 мая 2009

Пусть ваш класс реализует MouseListener и добавит его в качестве прослушивателя мыши на самой внешней панели. Вы должны получить событие, введенное мышью, когда мышь перемещается над панелью, и выход из мыши, когда она уходит; независимо от того, какие компоненты содержит панель.

Из JavaDoc:

void mouseEntered (MouseEvent e) Вызывается, когда мышь входит в компонент.

void mouseExited (MouseEvent e) Вызывается, когда мышь выходит из компонента.

...