Algorithmique et langage Java

Détection des mouvements de la souris

On ajoute dans les importations
import java.awt.event.*;
pour que les "évènements" comme le mouvement de la souris puissent être décelés.

On complète la déclaration de la classe PanneauPerso

class PanneauPerso extends JPanel implements MouseMotionListener
Eclipse vous signale alors un problème. La ligne ci-dessus a pour but de permettre au PanneauPerso de surveiller les mouvements de souris (Mouse Motion), or pour pouvoir ce faire PanneauPerso doit contenir les deux méthodes permettant justement cette surveillance.

On ajoute donc dans la classe PanneauPerso les deux méthodes suivantes :

  public void mouseMoved(MouseEvent e){
			}
			
public void mouseDragged(MouseEvent e){
			 }
			 

Telles qu'écrites ci-dessus, ces deux méthodes ne font strictement rien, mais elles existent, donc Eclipse ne signale plus d'erreur.

On peut compléter leur code pour leur faire faire quelque chose, par exemple

 public void mouseMoved(MouseEvent e){
	System.out.println("Je bouge!");
 }
 
public void mouseDragged(MouseEvent e){
	System.out.println("On me traîne!");
 }
 
Pour l'instant la classe PanneauPerso a la capacité de surveiller les mouvements de la souris dans un composant, mais il n'est pas précisé lequel. On va donc préciser quel est le composant surveillé, qui ne sera autre que le PanneauPerso lui-même, désigné par "this". On ajoute donc dans le constructeur du PanneauPerso la ligne
 addMouseMotionListener(this); 
Ce qui donne pour le programme complet :
 import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.event.*;

 // classe PanneauPerso  
class PanneauPerso extends JPanel implements MouseMotionListener{
		PanneauPerso(){
			setOpaque(true);
			setBackground(Color.black);
		    addMouseMotionListener(this); 
			 // le panneau (this) est chargé de surveiller les mouvements de souris au-dessus de lui-même 
		}
		 public void mouseMoved(MouseEvent e){
				System.out.println("Je bouge!");
		 }
		 
		 public void mouseDragged(MouseEvent e){
			System.out.println("On me traîne!");
		 }
	}

 //fin de la classe PanneauPerso 

 //début de la classe ActionSouris  
public class ActionSouris extends JFrame{
	
	ActionSouris(){
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		getContentPane().add(new PanneauPerso());
	}
	
	public static void main(String[] args) {
	      new ActionSouris();
	}

}

 //fin de la classe ActionSouris 
 
En exécutant le programme vous pouvez constater que la méthode MouseMoved est appelée quand la souris bouge au dessus du panneau, tandis que MouseDragged est appelée quand la souris est déplacée avec un bouton enfoncé.
 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé