Lorsque l'on reçoit une action d'un bouton de la souris, il y a deux solutions pour identifier le bouton concerné : la première consiste à utiliser la méthode <javaMethode class="java.awt.event.MouseEvent" methode="getButton()" /> et de comparer le résultat avec les constantes BUTTON1, BUTTON2 et BUTTON3. Cette solution n'est pas pleinement satifaisante car la documentation ne précise pas lequel est effectivement le bouton gauche. On préferera donc utiliser la classe <javaClass class="javax.swing.SwingUtilities" /> qui commente plus généreusement son fonctionnement :
void mousePressed(MouseEvent mouseEvent) if ( SwingUtilities.isLeftMouseButton(mouseEvent) )<comment>Bouton GAUCHE</comment> elseif(SwingUtilities.isMiddleMouseButton(mouseEvent) )<comment>Bouton du MILIEU</comment> elseif(SwingUtilities.isRightMouseButton(mouseEvent)) <comment>Bouton DROIT</comment>
Gardez toujours à l'esprit que certains systèmes n'ont pas de 2ème et/ou 3ème bouton, les traitements doivent donc être accessibles par un autre moyen.
Ouvrir le menu contextuel :
Il est tentant d'ouvrir le menu contextuel lorsque l'on détecte l'utilisation du bouton droit, mais cette implémentation ne serait pas portable, certains systèmes n'ont qu'un bouton de souris (Mac) d'autres n'utilisent pas le droit pour ouvrir le menu contextuel (linux permet de configurer les choses les plus folles). Pour cela, on utilisera la méthode <javaMethode class="java.awt.event.MouseEvent" methode="isPopupTrigger()"/> et on prendra soin de la tester dans <javaMethode class="java.awt.event.MouseListener" methode="mousePressed(java.awt.event.MouseEvent)" /> et dans <javaMethode class="java.awt.event.MouseListener" methode="mouseReleased(java.awt.event.MouseEvent)" />. Le faire dans les deux cas est très important pour que le programme fonctionne correctement sur tous les systèmes.
Sachant que la classe Cursor définit un certain nombre de curseurs par défaut ( DEFAULT_CURSOR, WAIT_CURSOR... ) on peut ainsi changer le curseur dans un Dialog ce qui n'était pas possible précédemment. Le changement de curseur est automatiquement hérité par tous les fils, sauf si ceux-çi précisent explicitement un autre curseur.
Sur un événement de type <javaClass class="java.awt.event.MouseEvent" />, la méthode <javaMethode class="java.awt.event.MouseEvent" methode="getClickCount()" /> permet de connaître le nombre de clics et donc de gérer les doubles.
De manière générale, ce cas ne devrait pas se produire. Le double clic ayant souvent une fonction complémentaire du simple clic.
La seule solution est l'utilisation de 'timer' qui sera lancé lors d'un simple clic et arrêté lors d'un 2ème clic. Si le temps est écoulé sans que le timer n'ait été arrêté par le 2ème clic, alors on exécute l'action associée au simple clic !
A partir d'un <javaClass class="java.awt.event.MouseEvent"/> :
Les coordonnées de la souris indiquées par la méthode <javaMethode methode="getPoint()" class="java.awt.event.MouseEvent" /> de la classe <javaClass class="java.awt.event.MouseEvent"/> sont relatives au composant qui écoute la souris. Pour connaître la position réelle de la souris à l'écran, il suffit d'ajouter ses coordonnées aux coordonnées du composant à l'écran ( methode <javaMethode methode="getLocationOnScreen()" class="java.awt.Component" /> de la classe <javaClass class="java.awt.Component" /> ).
int x = (int)(mouseEvent.getPoint().getX() + monComposant.getLocationOnScreen().getX());int y = (int)(mouseEvent.getPoint().getY() + monComposant.getLocationOnScreen().getY());
connaître la position de la souris hors de la fenêtre de l'application :
Lorsque la souris sort de la fenêtre de l'application, il n'est plus possible de recevoir d'évènement. Il devient donc impossible de connaître sa position. ( Note : Si l'utilisateur commence une opération de 'lâcher/déposer' dans l'application et qu'il sort de la fenêtre avant d'avoir relâché le bouton de la souris; des évènements 'mouseDrag' sont envoyés. ).
La classe <javaClass class="java.awt.Robot" /> permet entre autres de déplacer automatiquement la souris via la méthode <javaMethode methode="mouseMove(int,int)" class="java.awt.Robot" />. La classe Robot permet également d'actionner les boutons de la souris ou d'entrer des touches au clavier.
Attention :
Le déplacement automatique de la souris a le don d'énerver certains utilisateurs, il est donc conseillé de l'utiliser prudemment et/ou de permetre à l'utilisateur de désactiver cette fonction.
Les formats de fichiers '.cur' et '.ani' ne sont pas supportés en standard par l'API de Java. La meilleure solution consiste donc à utiliser un programme extérieur pour convertir ces fichiers dans un format reconnu par la JVM ('.png' ou '.gif' sont parfaitement adaptés pour ça). Les plus courageux peuvent se mettre à la recherche d'une bibliothèque additionelle...
Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduit en français ici.
Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement.