FAQ Java GUIConsultez toutes les FAQ
Nombre d'auteurs : 37, nombre de questions : 155, dernière mise à jour : 10 octobre 2015 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.
- Quel bouton de la souris a été utilisé ?
- Comment changer la forme du curseur de la souris ?
- Comment traiter les "double-clics" dans un MouseListener ?
- Comment traiter les "simple-clics" et les "double-clics" de manière exclusive ?
- Comment déplacer automatiquement la souris ?
- Comment charger un curseur '.cur' ou '.ani' ?
- Comment connaître la position de la souris à l'écran ?
- [Java 5.0] Comment connaître le nombre de boutons de la souris ?
- Comment simuler la pression d'une touche?
Cas général : 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 getButton() et comparer le résultat avec les constantes BUTTON1, BUTTON2 et BUTTON3. Cette solution n'est pas pleinement satisfaisante, car la documentation ne précise pas lequel est effectivement le bouton gauche. On préférera donc utiliser la classe javax.swing.SwingUtilities qui commente plus généreusement son fonctionnement :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | void mousePressed(MouseEvent mouseEvent) { if ( SwingUtilities.isLeftMouseButton(mouseEvent) ) { /** Bouton GAUCHE */ } else if(SwingUtilities.isMiddleMouseButton(mouseEvent) ) { /** Bouton du MILIEU */ } else if(SwingUtilities.isRightMouseButton(mouseEvent)) { /** Bouton DROIT */ } } |
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 isPopupTrigger() et on prendra soin de la tester dans mousePressed(java.awt.event.MouseEvent) et dans 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.
JDK 1.0 : dans la classe java.awt.Frame, des variables de classe (variables statiques) définissent des curseurs ; en choisir un et faire :
Code java : | Sélectionner tout |
1 2 | setCursor(Frame.celui_desire); // par exemple : DEFAULT_CURSOR, WAIT_CURSOR ... |
Code java : | Sélectionner tout |
myComponent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
Sur un événement de type java.awt.event.MouseEvent, la méthode 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 deuxième clic. Si le temps est écoulé sans que le timer n'ait été arrêté par le deuxième clic, alors on exécute l'action associée au simple clic !
La classe java.awt.Robot permet entre autres de déplacer automatiquement la souris via la méthode mouseMove(int,int). 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 permettre à 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 additionnelle...
A partir d'un composant avec MouseEvent
En enregistrant un MouseEvent auprès de votre composant graphique, vous pouvez avoir accès à la position de la souris relativement à ce composant. Il vous suffira ensuite d'utiliser la méthode getLocationOnScreen() de Component pour calculer la position de la souris par rapport à l'écran.
Code java : | Sélectionner tout |
1 2 | int x = (int)(mouseEvent.getPoint().getX() + monComposant.getLocationOnScreen().getX()); int y = (int)(mouseEvent.getPoint().getY() + monComposant.getLocationOnScreen().getY()); |
Code java : | Sélectionner tout |
1 2 3 4 | MouseEvent event = ...; Component composant = ...; Point locationComposant = event.getPoint(); Point locationEcran = SwingUtilities.convertPointToScreen(locationComposant, composant); |
À partir de Java 5.0 (Tiger), si vous voulez connaître la position de la souris (même en dehors d'une fenêtre), vous pouvez utiliser l'objet MouseInfo du package java.awt. Par exemple :
Code java : | Sélectionner tout |
1 2 3 | PointerInfo pointer = MouseInfo.getPointerInfo(); Point location = pointer.getLocation(); System.out.println("La souris se trouve en "+location); |
Avant Java 5.0, la seule solution possible est de passer par JNI (Java Native Interface). Vous pourrez ainsi avoir accès grâce à des langages plus proches du système aux coordonnées de la souris à l'écran. Attention tout de même, vous risquez de perdre la portabilité de votre application.
Depuis Java 5.0, il est possible de connaître le nombre de boutons de la souris grâce à la méthode statique MouseInfo.getNumberOfButtons() :
Code java : | Sélectionner tout |
System.out.println("La souris possède " + MouseInfo.getNumberOfButtons() + " bouton(s).");
Il vous faudra pour cela employer la classe Robot.
Voici un petit exemple avec la touche A :
Code java : | Sélectionner tout |
1 2 3 | Robot robot = new Robot(); /** création du robot */ robot.keyPress(KeyEvent.VK_A); /** pression de la touche A */ robot.keyRelease(KeyEvent.VK_A); /** relâchement de la touche A*/ |
Proposer une nouvelle réponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour çaLes sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.