Nous allons créer une série d'applets qui vont réagir à différents évènements générés par la souris. Ces évènements se divisent en deux groupes : évènements concernant un lieu particulier, évènements concernant un déplacement de la souris. Les applets se mettront à l'écoute de ces évènements, cela se fera en utilisant des interfaces spécifiques.
Une interface est un ensemble de déclarations de variables et de de méthodes. Lorsqu'une classe implémente une interface, elle donne une existence réelle à ces variables et méthodes. La notion d'interface permet ainsi de remplacer en la simplifiant celle d'héritage multiple qu'on rencontre en C++.
Lorsqu'une classe implémente une interface, elle le déclare grâce au mot-clé implements. Ceci donne :
public class ma_classe implements une_interface { .... }
Le compilateur java n'effectuera correctement son travail que si les variables et méthodes annoncées dans l'interface sont bien présentes dans la classe.
Il est possible d'utiliser plusieurs interfaces simultanément, il suffit de les déclarer après le mot-clé implements séparées par des virgules.
L'interface MouseListener permet à une classe de répondre aux évènements souris de base. Elle est définie dans le package java.awt.event qu'il faut donc importer. Elle contient les méthodes suivantes :
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. 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.
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 click qui affiche le mot Bonjour à l'endroit où l'utilisateur clique.
On importe les packages nécessaires et on déclare l'utilisation de l'interface MouseListener.
import java.awt.*; import java.awt.event.*; public class click extends java.applet.Applet implements MouseListener { .... }
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 un écouteur, c'est à dire une classe qui implémente l'interface MouseListener. Dans notre cas c'est l'applet elle-même qui sera l'écouteur. Cette déclaration peut se faire dans la méthode init :
public void init() { addMouseListener(this); }
Rappel : this représente la classe que l'on définit donc ici l'applet.
Note : il est aussi possible de définir une classe spéciale implémentant l'interface MouseListener.
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 pour cet exemple que la méthode mouseClicked. Il est cependant nécessaire de déclarer les autres en les laissant vides. Ceci nous donne :
public void mouseClicked(MouseEvent e) { //Invoked when the mouse has been clicked on a component. xmsg=e.getX(); ymsg=e.getY(); repaint(); } public void mousePressed(MouseEvent e) {} //Invoked when a mouse button has been pressed on a component. 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 mouseClicked enregistre donc les coordonnées de la souris dans les champs prévus à cet effet. Elle appelle ensuite la méthode repaint de l'applet qui provoque un réaffichage par un appel à la méthode update qui efface le contenu avec la couleur de fond et appelle la méthode paint que nous avons définie.
L'applet click étant complètement écrite, il reste à la compiler et à la tester.