FAQ Java GUIConsultez toutes les FAQ

Nombre d'auteurs : 51, nombre de questions : 152, dernière mise à jour : 29 juin 2013 

 
OuvrirSommaireLa souris et le clavier

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 de 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 :

 
Sélectionnez
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 */
        } 
} 

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 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.

Mis à jour le 27 janvier 2003  par Clément Cunin

JDK 1.0 :Dans la classe java.awt.Frame des variables de classe (variable statique) définissent des curseurs, en choisir un et faire :

 
Sélectionnez
setCursor(Frame.celui_desire);
// par exemple : DEFAULT_CURSOR, WAIT_CURSOR ... 

JDK 1.1 et +:

 
Sélectionnez
myComponent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

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.

Mis à jour le 1er mars 2003  par L'équipe Java

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.

Créé le 2 avril 2002  par L'équipe Java

Lien : Comment traiter les 'simple clic' et les 'double clic' de manière exclusive ?

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 !

Mis à jour le 9 avril 2002  par Clément Cunin

Lien : Comment faire un minuteur (timer) facilement ?

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.

Créé le 29 juin 2002  par Clément Cunin

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...

Créé le 1er mars 2003  par Clément Cunin

Lien : Comment accéder à une image ?

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.

 
Sélectionnez

int x = (int)(mouseEvent.getPoint().getX() + monComposant.getLocationOnScreen().getX());
int y = (int)(mouseEvent.getPoint().getY() + monComposant.getLocationOnScreen().getY());

Vous pouvez aussi utiliser la méthode convertPointToScreen() de la classe javax.swing.SwingUtilities. Par exemple :

 
Sélectionnez

MouseEvent event = ...; 
Component composant = ...;
Point locationComposant = event.getPoint();
Point locationEcran = SwingUtilities.convertPointToScreen(locationComposant, composant);

Sans composant graphique

A 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 :

 
Sélectionnez

PointerInfo pointer = MouseInfo.getPointerInfo();
Point location = pointer.getLocation(); 
System.out.println("La souris se trouve en "+location);

Attention, l'instance de PointerInfo n'est pas mise à jour automatiquement. Vous devrez en récupérer une nouvelle instance à chaque fois.

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 cooordonnées de la souris à l'écran. Attention tout de même, vous risquez de perdre la portabilité de votre application.

Mis à jour le 3 avril 2005  par Ioan Calapodescu

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() :

Afficher le nombre de bouton de la souris :
Sélectionnez

System.out.println("La souris possède " + MouseInfo.getNumberOfButtons() + " bouton(s).");
Créé le 22 août 2005  par adiGuba

Il vous faudra pour cela employer la classe Robot.

Voici un petit exemple avec la touche A :

 
Sélectionnez
Robot robot = new Robot();		/** création du robot */
robot.keyPress(KeyEvent.VK_A);		/** pression de la touche A */
robot.keyRelease(KeyEvent.VK_A);	/** relachement de la touche A*/

Bien sur il est possible de combiner plusieurs touches, par exemple pour faire un A majuscule, il faut combiner le A avec la touche shift.

Créé le 11 novembre 2006  par vasilov
Les codes sources présentés sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Pour le reste, ce document constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Ce document issu de http://www.developpez.com est soumis à deux licences, en fonction des contributeurs : - Les contributions de Clément Cunin et Johann Heymes sont soumises aux termes de la la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies des contributions de Clément Cunin et Johann Heymes tant que cette note apparaît clairement : "Ce document issu de http://www.developpez.com est soumis à la licence GNU FDL traduite en français ici. Permission vous est donnée de distribuer, modifier des copies de cette page tant que cette note apparaît clairement". - Pour ce qui est des autres contributions : Copyright © 2004 - 2009 Developpez LLC : Tous droits réservés Developpez LLC. Aucune reproduction ne peut en être faite sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.