2009-05-14 10 views
0

J'ai un JPanel, que je voudrais détecter les événements suivantsdétecter la souris Déplacer l'événement sur JPanel

(1) Lorsque le mouvement de la souris dans

(2) Lorsque déplacez la souris sur

Le (1) est rapide et facile. (2) est un peu difficile. Actuellement, je dois enregistrer l'événement à tous les composants autour de JPanel. Si le voisin autour de JPanel a détecté un mouvement de souris dans l'événement, cela signifie également que JPanel a une situation (2). Cependant, c'est un peu sale, car j'ajouterai de nouveaux composants à l'avenir, cette solution de contournement sale va casser.

Une autre méthode consiste à avoir une minuterie pour surveiller le JPanel. Si la position de la souris ne se trouve pas dans JPanel dans les x secondes, je peux considérer que JPanel a un évènement de déplacement de la souris. Cependant, cela me semble un sale moyen, car avoir une minuterie séparée pour effectuer une telle tâche commune est exagérée.

Y a-t-il un meilleur moyen de fournir la plate-forme Java?

Répondre

6

Demandez à votre classe d'implémenter MouseListener et de l'ajouter en tant qu'écouteur souris sur le panneau le plus externe. Vous devriez obtenir un événement saisi par la souris lorsque la souris se déplace sur le panneau, et quitter la souris quand il part; indépendamment de tous les composants que le panneau contient.

De l'JavaDoc:

vide mouseEntered (MouseEvent e) invoqué lorsque la souris entre un composant. Void mouseExited (MouseEvent e) Appelé lorsque la souris quitte un composant.