Cours les événements dans Java en pdf, tutoriel & guide de travaux pratiques en pdf.
Modèle d’événements de Java 1.1
Basé sur le principe général de la délégation.
Chaque événement est représenté par un objet
Contenu de l’objet évènement :
• la source de l’événement
• le moment auquel il a eu lieu
• des informations spécifiques (coordonnées souris, touche enfoncée, etc.).
Pour recevoir des évènements un objet doit :
• s’inscrire comme écouteur auprès d’un objet source d’événement ;
• posséder les méthodes requises pour traiter ce type d’événement.
Gestion de la souris (1)
Pour recevoir des événements de type MouseEvent Il faut
• implémenter l’interface MouseMotionListener.
c-à-d les méthodes mouseMoved() et mouseDragged().
• appeler la méthode addMouseMotionListener() de la source d’évènements pour s’inscrire.
Cas des applets :
une applet est sa propre source d’événements souris
On écrira donc l’appel d’inscription :
this.addMouseMotionListener(this);
Afficher en permanence lescoordonnées de la souris :
import java.awt.Graphics; import java.awt.Event; import java.awt.event.*; public class Interaction extends java.applet.Applet implements MouseMotionListener { int sourisX, sourisY; long quand; public void init() { this.addMouseMotionListener(this); } public void mouseMoved(MouseEvent e){ // extrait les informations de l’événement quand=e.getWhen(); sourisX=e.getX(); sourisY=e.getY(); repaint(); } public void mouseDragged(MouseEvent e) {} public void paint(Graphics g){ g.drawString(quand+ "=("+sourisX+","+sourisY+")",10,20); } }
À l’aide d’un adaptateur (2)
Classes toutes faites, appelées adaptateurs, qui réalisent chacune un écouteur inactif.
On définit un écouteur par extension d’un adaptateur.
import java.awt.Graphics; import java.awt.Event; import java.awt.event.*; public class InteractionI extends java.applet.Applet{ int sourisX, sourisY; long quand; class EcouteSouris extends MouseMotionAdapter { public void mouseMoved(MouseEvent e){ quand=e.getWhen(); sourisX=e.getX(); sourisY=e.getY(); repaint(); } } public void init() { this.addMouseMotionListener(new EcouteSouris()); } public void paint(Graphics g) { } } g.drawString(quand+"=("+sourisX+ ","+sourisY+")",10,20);
Avec des classes anonymes (3)
Pour éviter de définir explicitement une classe écouteur :
public class InteractionA extends java.applet.Applet { int sourisX, sourisY; long quand; public void init() { this.addMouseMotionListener( } new MouseMotionAdapter(){ public void mouseMoved(MouseEvent e){ } }); quand=e.getWhen(); sourisX=e.getX(); sourisY=e.getY(); repaint(); public void paint(Graphics g) { g.drawString(quand+"=("+sourisX+","+sourisY+")",10,20); } }
Définition d’une classe anonyme
new MouseMotionAdapter() { … } =
• définit une classe qui étend MouseMotionAdapter
• crée un objet de cette classe (l’écouteur).
Ecriture compacte mais plus très lisible
On mélange des déclarations de méthodes à l’intérieur d’expressions.
Interface MouseListener Clics:
mousePressed(), mouseReleased(), mouseClicked(),
Entrés/sortie du composant:
mouseEntered(), mouseExited().
Extraire les information de l’événement de type MouseEvent reçu :
getWhen() : le temps auquel s’est produit l’événement ;
getX(), getY() : la position du pointeur ;
getClickCount() : le nombre de clicks sur ce même point ;
isAltDown(), isAltGraphDown(), isControlDown(), isMetaDown(), isShiftDown() : vrai si la touche
(modificateur) Alt, AltGr, Ctrl, Meta ou Shift était enfoncée lors de l’événement ;
Souris à plusieurs boutons
getModifiers() : un codage sous forme d’un int des touches enfoncées.
On peut tester quel bouton a déclenché l’événement avec l’expression.
(getModifiers() & BUTTONi_MASK) // i = 1, 2 ou 3
Le résultat est différent de 0 si le bouton i a été pressé, relâché ou cliqué (c’est-à-dire pressé puis relâché).
Cependant, pour être vraiment portable, une application ne devrait pas faire d’hypothèses sur le nombre de boutons dont est munie la souris.