Nous allons créer une applet qui va réagir aux déplacements de la souris. Elle affichera un message qui pourra être déplacé en suivant la souris. Pour permettre cette opération nous utiliserons l'interface MouseMotionListener.
L'interface MouseMotionListener permet à une classe de répondre aux évènements liés au déplacement de la souris. Elle est définie dans le package java.awt.event qu'il faut donc importer. Elle contient les méthodes suivantes :
public void mouseDragged(MouseEvent e) { //Invoked when a mouse button is pressed on a component and then dragged. //Mouse drag events will continue to be delivered to the component //where the first originated until the mouse button is released //(regardless of whether the mouse position is within the bounds of the component). } public void mouseMoved(MouseEvent e) { //Invoked when the mouse button has been moved on a component (with no buttons no down). }
Ces méthodes ont comme paramètre un objet de type MouseEvent; celui-ci possède deux méthodes getX() et getY() qui renvoient les coordonnées du point où se trouve la souris.
Créons une applet nommée drag qui affiche le mot Bonjour et permet de le déplacer avec la souris.
On importe les packages nécessaires et on déclare l'utilisation des interfaces MouseListener et MouseMotionListener.
import java.awt.*; import java.awt.event.*; public class drag extends java.applet.Applet implements MouseListener,MouseMotionListener { .... }
L'applet click utilisera 3 champs : le contenu du message à afficher
et les coordonnées de l'endroit où doit s'effectuer l'affichage.
On déclare donc ces trois champs et on écrit la méthode paint qui
les utilise.
String msg="Bonjour"; int xmsg=20; int ymsg=20; public void paint(Graphics g) { g.drawString(msg,xmsg,ymsg); }
La méthode paint peut être complétée pour encadrer le message affiché.
Pour pouvoir gérer les évènements souris il est nécessaire de déclarer deux écouteurs, c'est à dire des classes qui implémentent les interfaces MouseListener et MouseMotionListener. Dans notre cas c'est l'applet elle-même qui fournira les écouteurs. Cette déclaration peut se faire dans la méthode init :
public void init() { addMouseListener(this); addMouseMotionListener(this); }
Rappel : this représente la classe que l'on définit donc ici l'applet.
Note : il est aussi possible de définir des classes spéciales implémentant les interfaces MouseListener et MouseMotionListener.
La méthode init peut être complétée pour définir des couleurs d'affichage et récupérer un message passé en paramètre à l'applet.
Nous n'utiliserons que la méthode mousePressed qui permettra d'afficher le message à l'endroit où l'on a cliqué. Ceci nous donne :
public void mouseClicked(MouseEvent e) {} //Invoked when the mouse has been clicked on a component. public void mousePressed(MouseEvent e) { //Invoked when a mouse button has been pressed on a component. xmsg=e.getX(); ymsg=e.getY(); repaint(); } public void mouseReleased(MouseEvent e) {} //Invoked when a mouse button has been released on a component. public void mouseEntered(MouseEvent e) {} //Invoked when the mouse enters a component. public void mouseExited(MouseEvent e) {} //Invoked when the mouse exits a component.
La méthode mousePressed enregistre donc les coordonnées de la souris dans les champs prévus à cet effet, puis elle appelle ensuite la méthode repaint de l'applet.
Nous n'utiliserons que la méthode mouseDragged qui gère les déplacements de la souris qui ont lieu avec le bouton gauche pressé. Ceci nous donne :
public void mouseDragged(MouseEvent e) { //vérifier que la souris est dans la zone if (contains(e.getX(),e.getY())) { xm=e.getX(); ym=e.getY(); repaint(); } } public void mouseMoved(MouseEvent e) {}
La méthode mouseDragged vérifie que le pointeur de la souris se trouve bien à l'intérieur de l'applet et dans ce cas enregistre la nouvelle position d'affichage et appelle la méthode repaint pour redessiner l'applet.
L'applet drag étant complètement écrite, il reste à la compiler et à la tester.