Une solution avec un délégué                        

Une solution où l'essentiel de l'application se trouve être déléguée

     

L'application est représentée par les deux images ci-dessous. Quand on appuie sur le bouton trace, le disque rouge apparaît, quand on appuie sur le bouton efface, le disque disparaît. :

     

On utilise toujours ici la classe Ardoise.

La solution qu'on présente ici consiste à séparer l'interface graphique de la description des actions consécutives aux clics sur les boutons ; on indique néanmoins ici dans la partie graphique quelles sont les instances déléguées qui doivent effectuées les actions.

On sépare ainsi l'essentiel de l'application de la gestion de l'interface graphique (ajouter des composants, les répartir...).

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Delegue implements  ActionListener {
    Ardoise ardoise;
    boolean existe;
    
    Delegue(Ardoise ardoise, boolean existe) {
	this.ardoise = ardoise;
	this.existe = existe;
    }
    
    public void actionPerformed(ActionEvent e) {
	ardoise.setPossedeDisque(existe);
	ardoise.repaint();
    }
}

public class VueBoutons4 extends JFrame {
    private Ardoise ardoise = new Ardoise();
    public VueBoutons4() {  
	JButton trace = new JButton("trace");
	JButton efface = new JButton("efface");
	JPanel lesBoutons = new JPanel();
	
	lesBoutons.add(trace);
	lesBoutons.add(efface);
	setLayout(new BorderLayout(5, 5));
	add(lesBoutons, BorderLayout.NORTH);
	add(ardoise, BorderLayout.CENTER);
	trace.addActionListener(new Delegue(ardoise, true));
	efface.addActionListener(new Delegue(ardoise, false));

	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setLocation(200,200);
	pack();
	setVisible(true);
    }
}

class EssaiBoutons4 {
   public static void main(String[] arg) {
      new VueBoutons4());
   }
}
Pour accéder au fichier VueBoutons4.java.

© Irène Charon, Télécom ParisTech 2011