Evénements

mettre en place un "écouteur" (listener)

Source de Prog46.java
import java.awt.Button; 
import java.awt.Label; 
import java.applet.Applet; 
import java.awt.Color; 
 
public class Prog46
       extends Applet {
   public void init() { 
     Button monBouton = new Button("Changer");  
     add(monBouton); 
     Label monLabel = new Label("Changer");  
     add(monLabel); 
     monLabel.setForeground(Color.red);
     monBouton.addActionListener(new Delegue1(monLabel)); 
  } 
}

Source de Delegue1.java
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.Label;
import java.awt.Color;  
 
public class Delegue1 
       implements ActionListener { 
  private Label leLabel;
  private boolean etatLabel; 
  public Delegue1(Label lab) {
    leLabel = lab;
    etatLabel=true;
  }
  public void actionPerformed(ActionEvent event) { 
    etatLabel = ! etatLabel;
    if (etatLabel)
      leLabel.setForeground(Color.red);
    else
      leLabel.setForeground(Color.blue);
  } 
}

événements Button

un délégué qui peut agir sur l'objet où s'est produit l'événement

Source de Prog47.java
import java.awt.List; 
import java.awt.Label; 
import java.applet.Applet; 
 
public class Prog47
       extends Applet {
   private List maListe;
   private Label monLabel;
   private final Color tabCouleur[]= {Color.red, 
                     Color.blue, Color.green,
                     Color.yellow, Color.black };
   public void init() { 
     maListe = new List(3);  
     maListe.add("bleu"); 
     maListe.add("rouge"); 
     maListe.add("vert"); 
     maListe.add("jaune"); 
     maListe.add("noir"); 
     add(maListe); 
     monLabel = new Label("Choisir");  
     add(monLabel); 
     maListe.addActionListener(new Delegue2(this)); 
  } 
  public void changeLabel () {
    int index = maListe.getSelectedIndex();
    monLabel.setBackground(tabCouleur[index]);
  }
}

Source de Delegue2.java
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.Label; 
import java.awt.List; 
import java.awt.Color; 
 
public class Delegue2
       implements ActionListener { 
  private Prog47 monApplet;
  public Delegue2(Prog47 monApp) {
    monApplet = monApp;
  }
  public void actionPerformed(ActionEvent event) { 
    monApplet.changeLabel();
  } 
}

les menus

Source de Prog48.java
import java.awt.MenuBar; 
import java.awt.Menu; 
import java.awt.MenuItem; 
import java.awt.Label; 
import java.applet.Applet; 
import java.awt.Color; 
 
public class Prog48
       extends Applet {
   private Label monLabel;
   public void init() { 
     Delegue3 monDelegue= new Delegue3(this);
     MenuBar maBarreDeMenu = new MenuBar();  
     add(maBarreDeMenu); 
     Menu menu1 = new Menu("fond"); 
     maBarreDeMenu.add(menu1);
     MenuItem m1rouge = new MenuItem("fond rouge");
     m1rouge.addActionListener(monDelegue);
     menu1.add(m1rouge); 
     MenuItem m1bleu = new MenuItem("fond bleu");
     m1bleu.addActionListener(monDelegue);
     menu1.add(m1bleu); 
     MenuItem m1vert = new MenuItem("fond vert");
     m1vert.addActionListener(monDelegue);
     menu1.add(m1vert); 
     menu1.addSeparator();
     MenuItem m1noir = new MenuItem("fond noir");
     m1noir.addActionListener(monDelegue);
     menu1.add(m1noir); 
     Menu menu2 = new Menu("texte"); 
     maBarreDeMenu.add(menu2);
     MenuItem m2rouge = new MenuItem("texte rouge");
     m2rouge.addActionListener(monDelegue);
     menu2.add(m2rouge); 
     MenuItem m2bleu = new MenuItem("texte bleu");
     m2bleu.addActionListener(monDelegue);
     menu2.add(m2bleu); 
     MenuItem m2vert = new MenuItem("texte vert");
     m2vert.addActionListener(monDelegue);
     menu2.add(m2vert); 
     MenuItem m2noir = new MenuItem("texte noir");
     m2noir.addActionListener(monDelegue);
     menu2.add(m2noir); 
     monLabel = new Label("Changer");  
     add(monLabel); 
     setVisible(true);
     pack();
 } 
  public void changeLabelFond (Color couleur) {
    monLabel.setBackground(couleur);
  }
  public void changeLabelTexte (Color couleur) {
    monLabel.setForeground(couleur);
  }
}

Source de Delegue3.java
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.awt.Color;  
 
public class Delegue3 
       implements ActionListener { 
  private Prog48 monApplet;
  public Delegue3(Prog48 app) {
    monApplet = app;
  }
  public void actionPerformed(ActionEvent event) {
    Color couleur= Color.white;
    String nomDeMenuChoisi = event.getActionCommand(); 
    if (nomDeMenuChoisi.indexOf("rouge")>=0)
      couleur = Color.red;
    else if (nomDeMenuChoisi.indexOf("bleu")>=0)
      couleur = Color.blue;
    else if (nomDeMenuChoisi.indexOf("vert")>=0)
      couleur = Color.green;
    else if (nomDeMenuChoisi.indexOf("noir")>=0)
      couleur = Color.black;
    if (nomDeMenuChoisi.indexOf("fond")>=0)
      monApplet.changeLabelFond(couleur);
    if (nomDeMenuChoisi.indexOf("texte")>=0)
      monApplet.changeLabelTexte(couleur);
  } 
}

utiliser les valeurs modifiées de TextField

Source de Prog49.java
import java.awt.TextField; 
import java.awt.Label; 
import java.applet.Applet; 
import java.awt.Color;  
 
public class Prog49
       extends Applet {
   private TextField valeurR, valeurV, valeurB;
   private Label monLabel;
   public void init() { 
     monLabel = new Label("intensité couleur [0-255]");  
     add(monLabel); 
     Delegue4 monDelegue= new Delegue4(this);
     add(new Label("R:")); 
     valeurR = new TextField("255",3);
     add(valeurR);
     valeurR.addActionListener(monDelegue); 
     add(new Label("V:")); 
     valeurV = new TextField("255",3);
     add(valeurV);
     valeurV.addActionListener(monDelegue); 
     add(new Label("B:")); 
     valeurB = new TextField("255",3);
     add(valeurB);
     valeurB.addActionListener(monDelegue); 
  } 
  private int convertir(String intensite) {
    int val= (new Integer(intensite)).intValue();
    if (val <0)
      return 0;
    else if (val >255)
      return 255;
    else
      return val;
  }
  public void changeLabel () {
    int r = convertir(valeurR.getText());
    int v = convertir(valeurV.getText());
    int b = convertir(valeurB.getText());
    monLabel.setBackground(new Color(r,v,b));
  }
}

Source de Delegue4.java
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
 
public class Delegue4 
       implements ActionListener { 
  private Prog49 monApplet;
  public Delegue4(Prog49 monApp) {
    monApplet = monApp;
  }
  public void actionPerformed(ActionEvent event) {
      monApplet.changeLabel();
  } 
}

ActionListener

les événements des Frames
et la classe siège de l'événement qui est son propre délégué

Source de Prog71.java
import java.awt.Label;
import java.awt.Frame;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import java.awt.FlowLayout;
public class Prog71
       extends Frame
       implements WindowListener {
  public static void main(String args[])
  {
    new Prog71();
  }
  public Prog71() {
    setTitle("Prog71");
    setSize(200,100);
    setLayout(new FlowLayout(FlowLayout.CENTER));
    setVisible(true);
    addWindowListener(this);
 }
  public void windowClosing(WindowEvent e) {
    add(new Label("fini dans 5 secondes !"));
    pack();
    try {
      Thread.sleep(5000);
    } catch (InterruptedException ie) {
      System.exit(1);
    }
    setVisible(false);
    dispose(); 
    System.exit(0); 
  }
  public void windowOpened(WindowEvent e) {}
  public void windowActivated(WindowEvent e) {}
  public void windowDeactivated(WindowEvent e) {}
  public void windowClosed(WindowEvent e) {}
  public void windowIconified(WindowEvent e) {}
  public void windowDeiconified(WindowEvent e) {}
}

les événements en résumé

composant action événement interface d'écoute
Button, List, MenuItem, TextField, Checkbox sélectionner,valider ActionEvent ActionListener
TextArea, TextField changer le texte TextEvent TextListener
Frame ouvrir, fermer, iconifier, ... WindowEvent WindowListener
Container mouvement et clic de souris, frappe au clavier MouseEvent, MouseMotionEvent, KeyEvent MouseListener, MouseMotionListener, KeyListener

la technique des Adapters

Source de Prog72.java
import java.awt.Frame;
import java.awt.Dimension;
import java.awt.Label;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.FlowLayout;
public class Prog72
       extends Frame {
  public static void main(String args[])
  {
    new Prog72();
  }
  public Prog72() {
    setTitle("Prog72");
    setSize(200,100);
    setLayout(new FlowLayout(FlowLayout.CENTER));
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        add(new Label("fini dans 5 secondes !"));
        pack();
        try {
          Thread.sleep(5000);
        } catch (InterruptedException ie) {
          System.exit(1);
        }
        setVisible(false);
        dispose();
        System.exit(0);
      }
      public void windowDeiconified(WindowEvent e) {
        Dimension dim=getSize();
	    setSize(dim.width, dim.height);
      }
    });
    setVisible(true);
  }
}

WindowAdapter

exemple d'application graphique : Editer un fichier

Source de EditerFichier.java
import java.awt.*;
import java.io.*;
import java.awt.event.*;

public class EditerFichier
       extends Frame 
       implements ActionListener {

  TextArea texte;
  String messageFichier="Donnez ici un nom de fichier";
  String messageTexte="Saisir le texte ici";
  TextField champFichier;
  public static void main(String[] args)  {
    new EditerFichier();
    }
  public EditerFichier() {
    this.setTitle("Editer un Fichier");
    texte= new TextArea(messageTexte, 20,50);
    texte.setEditable(true);
    this.add("Center",texte);
    champFichier= new TextField(messageFichier,20);
    this.add("South",champFichier);
    MenuBar barreMenu= new MenuBar();
    this.setMenuBar(barreMenu);
    Menu menuFichier= new Menu("Fichier");
    barreMenu.add(menuFichier);
    MenuItem menuOuvrir= new MenuItem("Ouvrir");
    menuOuvrir.addActionListener(this);
    menuFichier.add(menuOuvrir);
    MenuItem menuEnregistrer= new MenuItem("Enregistrer");
    menuEnregistrer.addActionListener(this);
    menuFichier.add(menuEnregistrer);
    MenuItem menuQuitter= new MenuItem("Quitter");
    menuQuitter.addActionListener(this);
    menuFichier.add(menuQuitter);
    this.pack();
    this.setVisible(true);
  } 
  public void actionPerformed (ActionEvent e) {
    String menuSelectionne= e.getActionCommand();
    if (menuSelectionne.equals("Quitter")) {
      this.setVisible(false);
      this.dispose();
      System.exit(0);
    }
    else if (menuSelectionne.equals("Enregistrer")) {
      if (!champFichier.getText().equals(messageFichier))
        enregistrerFichier(champFichier.getText());
    } else if (menuSelectionne.equals("Ouvrir")) 
      if (!champFichier.getText().equals(messageFichier))
        chargerFichier(champFichier.getText());
  } 
  public void chargerFichier(String nomFichier) {
     Fichier fichier= new Fichier(nomFichier);
     if (!fichier.lirePossible()) {
       champFichier.setText(messageFichier);
       return;
     }
     texte.setText("");
     try {
       FileReader flotLecture = new FileReader(fichier);
       long longueurFichier= fichier.length();
       int dejaLu = 0;
       char car=0;
       while (dejaLu < longueurFichier) {
         car= (char)flotLecture.read();
         dejaLu = dejaLu + 1;
         texte.append(String.valueOf(car));
       }
       flotLecture.close();
     } catch (IOException e) {
       System.out.println(" erreur :" + e.toString());
     }    
  }
  public void enregistrerFichier(String nomFichier) {
     Fichier fichier= new Fichier(nomFichier);
     if (fichier.ecrirePossible()) {
       try {
         FileWriter flotEcriture = new FileWriter(fichier);
         flotEcriture.write(texte.getText());
         flotEcriture.close();
       } catch (IOException e) {
         System.out.println(" erreur :" + e.toString());
       }    
       texte.setText(messageTexte);
     }
     champFichier.setText(messageFichier);
  }
}

exercices