Une solution où on construit une classe pour chaque bouton                        

Une solution où on construit une classe pour chaque bouton

     

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.

Chaque bouton est chargée d'une tâche et, pour cela, on définit pour chacun d'entre eux une classe héritée de la classe JButton. On peut ainsi assigner à chaque bouton sa tâche. Lorsqu'une fenêtre possède beaucoup de composants, et lorsque le nombre total d'événements devient grand, il peut être plus lisible de gérer ainsi le rôle de chaque composant. Néanmoins, cette solution n'est pas forcément la meilleure car elle mélange la construction de l'interface graphique avec les fonctionnalités de l'application.

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 BoutonTrace extends JButton implements ActionListener {
    private Ardoise ardoise;
    
    BoutonTrace(String nom, Ardoise ardoise) {
	super(nom);
	this.ardoise = ardoise;
	addActionListener(this);
    }
    
    public void actionPerformed(ActionEvent e) {
	ardoise.setPossedeDisque(true);
	ardoise.repaint();
    }
}

class BoutonEfface extends JButton implements ActionListener {
    private Ardoise ardoise;
    
    BoutonEfface(String nom, Ardoise ardoise) {
	super(nom);
	this.ardoise = ardoise;
	addActionListener(this);
    }
    
    public void actionPerformed(ActionEvent e) {
	ardoise.setPossedeDisque(false);
	ardoise.repaint();
    }
}

public class Boutons2 extends JPanel {
    public Boutons2() {  
	Ardoise ardoise = new Ardoise();
	BoutonTrace trace = new BoutonTrace("trace",  ardoise);
	BoutonEfface efface = new BoutonEfface("efface", ardoise);
	JPanel lesBoutons = new JPanel();
	
	lesBoutons.add(trace);
	lesBoutons.add(efface);
	setLayout(new BorderLayout(5, 5));
	add(lesBoutons, BorderLayout.NORTH);
	add(ardoise, BorderLayout.CENTER);
    }
}

class EssaiBoutons2 {
    public static void main(String[] arg) {
	JFrame monCadre = new JFrame();
	monCadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	monCadre.setLocation(200,200);
	monCadre.setContentPane(new Boutons2());
	monCadre.pack();
	monCadre.setVisible(true);
    }
}
Pour accéder au fichier Boutons2.java.

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