Vous êtes sur la page 1sur 15

Evénements

● L'utilisateur utilise le clavier et la souris pour


interagir sur le déroulement du programme.
● Le programme doit lier des traitements aux actions
de l'utilisateur.
● On distingue les événements de "bas niveau",
actions élémentaires de l'utilisateur, et les
événements de "haut niveau", qui correspondent à
une action logique de l'utilisateur.
● Un exemple, la frappe d'un "A":
– en bas niveau ; 4 evts : appui sur shift, appui sur a,
relachement de a et relachement de shift.
– en haut niveau ; 1 evt : frappe de "A".

Olivier Curé ­ UMLV [page 162 ]
La classe ActionEvent
● Cette classe décrit des événements de haut
niveau très utilisés qui correspondent à un type
d'action de l'utilisateur qui va déclencher un
traitement. C'est le cas, pour :
● le clic d'un bouton,
● la frappe de la touche return dans une zone de
texte,
● un choix dans un menu,
● un double clic dans une liste.

Olivier Curé ­ UMLV [page 163 ]
Comment utiliser les
listeners
● Pour enregistrer un listener, il faut instancier
une classe implémentant une certaine interface.
● On peut créer un tel objet de plusieurs manières.
● La méthode addActionListener sur un bouton
enregistre les objets déclenchés par un clic.
Respectivement, removeActionListener
désenregistre les objets.
● ActionListener est une interface définissant la
méthode actionPerformed(ActionEvent evt).

Olivier Curé ­ UMLV [page 164 ]
import javax.swing.*; import java.awt.*; import java.awt.event.*;
class FrameTd4 extends JFrame implements ActionListener {
  JButton jb1;

Ex. 5
  JLabel jl1;
  public FrameTd4() {
    setTitle("Ma JFrame avec des evenements");
    setSize(200,200);

JFrame
    Container contentPane = this.getContentPane();
    contentPane.setLayout (new java.awt.GridLayout (2, 2));
    jb1 = new JButton("Mon bouton avec evt");
    jb1.addActionListener(this);
    jb1.setBackground(Color.yellow);
    jl1 = new JLabel("Pas de message");
    contentPane.add(jb1);
    contentPane.add(jl1);
    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) { 
                  System.exit(0); }});
  } 
 public void actionPerformed(ActionEvent evt)
   {
    jl1.setText("Un clic sur bouton #1");
   } 
}
public class FrameTd4Test
{
  public static void main(String args[])
  {
     JFrame frame1 = new FrameTd4();
     frame1.show();
  }
}

Olivier Curé ­ UMLV [page 165 ]
Comment utiliser les
listeners (2)
● On peut enregistrer un même listener pour
plusieurs composants.
● La méthode getSource() permet alors d'obtenir
le composant ayant créé l'événement.
public void actionPerformed(ActionEvent) {
 Object o = event.getSource();
 if(o==jb1)
   ...
 else if(o==jb1) ...

Olivier Curé ­ UMLV [page 166 ]
import javax.swing.*; import java.awt.*; import java.awt.event.*;
class Frame5 extends JFrame implements ActionListener {
JButton jb1,jb2;
JLabel jl1;
private int cpt;
public Frame5() {
setTitle("Ma JFrame avec des evenements");
setSize(200,200);
Container contentPane = this.getContentPane();
contentPane.setLayout (new java.awt.GridLayout (2, 2));
jb1 = new JButton("+");
jb1.addActionListener(this);
jb1.setBackground(Color.yellow);
jb2 = new JButton("-");
jb2.addActionListener(this);
jb2.setBackground(Color.blue);
jl1 = new JLabel(""+cpt);
contentPane.add(jb1);
contentPane.add(jb2);
contentPane.add(jl1);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0); }});
}

public void actionPerformed(ActionEvent evt)


{
if(evt.getSource()==jb1)
cpt++;
else
if(evt.getSource()==jb2)
cpt--;
jl1.setText(""+cpt);
}
}
public class FrameTest5
{
public static void main(String args[])
{
JFrame frame = new Frame5();
frame.setVisible(true);
}
}

Olivier Curé ­ UMLV [page 167 ]
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;

Ex. import javax.swing.JPanel;
public class TestListener extends JFrame {
private JPanel panel;
6 public TestListener() 
{this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("TestListener");
JPanel panel = new JPanel();
JButton boutonRouge = new JButton("Rouge");
boutonRouge.addActionListener(new MyActionListener(panel, 
Color.RED));
JButton boutonBleu = new JButton("Bleu");
boutonBleu.addActionListener(new MyActionListener(panel, 
Color.BLUE));
panel.add(boutonRouge);
panel.add(boutonBleu);
this.getContentPane().add(panel);
}
public static void main(String[] args) {
TestListener test = new TestListener();
test.setVisible(true);
}
}
Olivier Curé ­ UMLV [page 168 ]
Ex.
import java.awt.Color;
6 import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
fin public class MyActionListener implements ActionListener {
private JPanel panel;
private Color color;
public MyActionListener(JPanel panel, Color color) {
this.panel = panel;
this.color= color;
}
public void actionPerformed(ActionEvent evt) {
panel.setBackground(color);
}
}

Olivier Curé ­ UMLV [page 169 ]
Classe anonyme
● Les classes anonymes sont déclarées
immédiatement après l'expression
d'instanciation d'une classe, permettant
directement d'étendre ou d'implémenter
respectivement la classe ou l'interface
instanciée.
● La déclaration d'une classe anonyme doit être
toujours suivie d'un point virgule
immédiatement après son accolade fermante,
sans quoi une erreur de compilation serait
générée.

Olivier Curé ­ UMLV [page 170 ]
Classe anonyme (2)
● Les classes anonymes obéissent aux mêmes
restrictions que les classes locales et de plus, ne
peuvent ni être abstraites (abstract) ni être
statiques (static).
● Par contre, elles portent toujours implicitement
le modificateur final.
● En fait, aucun modificateur n'est permis dans
une déclaration de classe anonyme.

Olivier Curé ­ UMLV [page 171 ]
Classe anonyme (3)
● Une classe anonyme ne peut déclarer
explicitement un constructeur, le compilateur
Java fournissant automatiquement un
constructeur anonyme pour ce genre de classe.
● Une classe anonyme ne possède pas
d'identificateur et est immédiatement utilisée
lors de l'instanciation de la classe ou l'interface
concernée.
● Les classes anonymes ont été créées pour écrire
les listeners

Olivier Curé ­ UMLV [page 172 ]
Classe anonyme: exemple
JButton bouton = new JButton();
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent 
evt) {
System.out.println(evt);
} });
bouton.addActionListener(al);

Olivier Curé ­ UMLV [page 173 ]
Classe anonyme (4)
● On peut accéder aux champs de la
classe et aux variables locales.

Olivier Curé ­ UMLV [page 174 ]
import java.awt.Color;
import java.awt.event.ActionEvent;

Ex. 7 import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class TestListenerAnonyme extends JFrame {
public TestListenerAnonyme() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setTitle("TestListener");
setSize(200,200);
JPanel panel = new JPanel();
panel.add(addButton(panel, Color.RED,"rouge"));
panel.add(addButton(panel, Color.BLUE,"bleu"));
this.getContentPane().add(panel);
}
public JButton addButton(final JPanel panel, final Color color, String 
texte) {
JButton bouton = new JButton(texte);
bouton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
panel.setBackground(color);
}});
return bouton;
}
public static void main(String[] args) {
TestListenerAnonyme test = new TestListenerAnonyme();
test.setVisible(true);
}
}

Olivier Curé ­ UMLV [page 175 ]
Plug-in VE

Olivier Curé ­ UMLV [page 176 ]

Vous aimerez peut-être aussi