Université Mhamed Bougara Boumerdes, FS, DI, L3, SI-ISIL, IHM, Série 3
Mr. A Rezoug
Un composant visible sur un écran est la cible d'actions faites par l'utilisateur à l'aide de la souris, du clavier ou de
tout autre organe de saisie disponible. En Java le traitement de l’événement est délégué à un autre composant que
celui qui l’a perçu. L’action de l'utilisateur sur le composant provoque la création d'un objet évènement, c’est
comme un « rapport » décrivant la nature et les circonstances de cette action.
import javax.swing.*; public class CadreAvecPanneauSensible {
import java.awt.Color; public static void main(String[] args) {
import java.awt.event.*; JFrame fen = new JFrame();
JPanel panneau = new JPanel();
class GuetteurSouris implements MouseListener { panneau.setBackground(Color.WHITE);
GuetteurSouris felix = new GuetteurSouris();
public void mousePressed(MouseEvent e) {
panneau.addMouseListener(felix);
System.out.println("Clic en (" + e.getX() + ", " + e.getY() + ")");
fen.getContentPane().add(panneau);
} fen.setSize(250, 150);
public void mouseReleased(MouseEvent e) {} // RELÂCHER fen.setVisible(true);
public void mouseClicked(MouseEvent e) {} fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
public void mouseEntered(MouseEvent e) {} }
public void mouseExited(MouseEvent e) {} }
}
Le code précèdent met en évidence les trois éléments clés suivants:
1. les évènements qu'il faut détecter et traiter; ici, il s'agit des instances de la classe MouseEvent.
2. la source de ces évènements, Ici, la source des évènements est l'objet JPanel qui est la valeur de la
variable panneau.
3. le gestionnaire de ces évènements, un auditeur dument enregistré auprès de la source. Ici, cet auditeur est
une instance, nommée felix, de notre classe GuetteurSouris.
L'expression panneau.addMouseListener(felix) indique que panneau est considéré ici comme une source
d'évènements souris et que ces évènements doivent être notifies a l'objet felix.
Listeners vs. Adaptateurs
L’écouteur MouseListener possède cinq comportements spécifiques. En utilisant l’héritage « extends » de
l’adaptateur correspondant MouseAdapter », nous n’avons plus l’obligation de définir l’intégralité des cinq
comportements mais uniquement les méthodes qu’on veut, pour notre exemple, seule la méthode
mousePressed().
Principaux types d'évènements
Un évènement correspond à une interface d'auditeurs. Les seules en awt sont les suivantes :
Evènement de bas niveau
1. MouseListener. Les méthodes de cette interface sont : mousePressed , mouseReleased , mouseClicked ,
mouseEntered , mouseExited , getX(), getY() ,getButton().
2. MouseMotionListener. Cette interface concerne les mouvements de la souris et ses méthodes :
mouseMoved et mouseDragged
3. KeyListener. Il gère un évènement clavier chaque fois qu'une touche est pressée ou relâchée :
keyPressed(KeyEvent e) , keyReleased(KeyEvent e), keyTyped(KeyEvent e).
4. WindowListener. concerne les actions sur une fenêtre, Ce qui donne les méthodes :
windowClosing(WindowEvent e) , windowActivated(WindowEvent e) , windowDeactivated(WindowEvent e) ,
windowClosed(WindowEvent e) , windowOpened(WindowEvent e) , windowIconified(WindowEvent e) ,
windowDeiconified(WindowEvent e)
5. FocusListener.. A tout moment, un seul composant a le focus; un composant acquiert le focus lorsqu'il subit
un clic de la souris focusGained(FocusEvent e) ; focusLost(FocusEvent e)
1
Les évènements de haut niveau.
A. ActionListener. Cette interface concerne des actions (avec la souris ou le clavier) sur un composant, se
compose d'une seule méthode : actionPerformed (ActionEvent e)
B. ItemListener. Il se produit un lorsqu'un item est sélectionné ou désélectionné. Par item nous entendons ici un
élément d'une liste déroulante, d'une liste de choix, une case à cocher, etc. Une seule méthode dans cette
interface : itemStateChanged(ItemEvent e)
C. AdjustmentListener. concerne les actions faites sur des barres de défilement. Une seule méthode :
adjustmentValueChanged(AdjustmentEvent e)
D. TextListener. Les événements de cette interface notifient les modifications du texte en cours de saisie dans
un champ ou une zone de texte. Une seule méthode : textValueChanged(TextEvent e) appelée lorsque le texte
concerné a changé
Exercice 1
Écrire un programme qui crée une fenêtre (de type JFrame) et qui détecte les événements "appui" et
"relâchement" associés à la souris et ayant la fenêtre comme source. On se contentera de signaler chacun de ces
deux événements en affichant en fenêtre console un message précisant sa nature (appui ou relâchement), ainsi
que les coordonnées correspondantes.
On proposera quatre solutions :
1. la fenêtre est son propre écouteur de souris et elle implémente l’interface MouseListener,
2. on utilise un écouteur différent de la fenêtre, objet d’une classe implémentant l’interface MouseListener,
3. on utilise un objet écouteur différent de la fenêtre en recourant à l’adaptateur MouseAdapter,
4. on utilise un écouteur différent de la fenêtre, objet d’une classe anonyme dérivée de MouseAdapter.
Exercice 2
Écrire un programme qui crée une fenêtre de gestion d’étudiants comme la
figure tel que :
Register : Cliquer sur ce bouton sauvegarde l’étudiant dont les informations
sont remplit, dans un fichier texte "bdd.txt" sous la forme :
Prénom Nom Email Téléphone
Clear : Cliquer sur ce bouton efface les champs.
NB: Le code suivant permet de créer le fichier et sauvegarder les données
File bdd = new File ("./bdd.txt");
BufferedWriter bf = new BufferedWriter(new FileWriter(bdd,true));
bf.write(fname.getText()+"\t"+ lName.getText()+"\t"+email.getText()+"\t"+phNO.getText()+"\n");
bf.flush();
bf.close();
Exercice 3 TP : Écrire le code suivant, puis expliquer ce qu’il fait.
import java.awt.*; frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
import java.awt.event.*; frame.setSize(300, 100);
import javax.swing.*; frame.setVisible(true);
public class KeyListenerTest implements KeyListener, }
ActionListener { @Override //surcharger une méthode dans un descendant
JFrame frame; public void keyTyped(KeyEvent ke) {
JTextField tf; lbl.setText("You have typed " + ke.getKeyChar());
JLabel lbl; }
JButton btn; @Override
public void keyPressed(KeyEvent ke) {
public KeyListenerTest() { lbl.setText("You have pressed " + ke.getKeyChar());
frame = new JFrame(); }
lbl = new JLabel(); @Override
tf = new JTextField(15); public void keyReleased(KeyEvent ke) {
tf.addKeyListener(this); lbl.setText("You have released " + ke.getKeyChar());
btn = new JButton("Clear"); }
btn.addActionListener(this); @Override
JPanel panel = new JPanel(); public void actionPerformed(ActionEvent ae) {
panel.add(tf); tf.setText("");
panel.add(btn); }
frame.setLayout(new BorderLayout()); public static void main(String args[]) {
frame.add(lbl, BorderLayout.NORTH); new KeyListenerTest();
frame.add(panel, BorderLayout.SOUTH); }}