Une même classe modélise les deux boutons</a>                        

Une même classe modélise les deux boutons

     

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 emploie toujours ici la classe Ardoise.

On utilise ici une même classe pour modéliser les deux boutons. Le constructeur de la classe reçoit en paramètre, outre le nom du bouton et l'ardoise dans laquelle le disque apparaît, une valeur booléenne indiquant si, dans l'action il s'agit de tracer le disque (valeur true) ou bien de l'effacer (valeur false).

On profite ici de cet exemple pour montrer une autre façon de faire pour l'interface graphique, en étendant la classe JFrame plutôt que la classe JPanel.

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

public class Boutons2Bis extends JFrame {
    public Boutons2Bis() {  
	Ardoise ardoise = new Ardoise();
	BoutonArdoise trace = new BoutonArdoise("trace",  ardoise, true);
	BoutonArdoise efface = new BoutonArdoise("efface", ardoise, false);
	JPanel lesBoutons = new JPanel();
	
	lesBoutons.add(trace);
	lesBoutons.add(efface);
	add(lesBoutons, BorderLayout.NORTH);
	add(ardoise, BorderLayout.CENTER);

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

class EssaiBoutons2Bis {
    public static void main(String[] arg) {
      new Boutons2Bis();
    }
}
Pour accéder au fichier Boutons2Bis.java.
add(lesBoutons, BorderLayout.NORTH); : on ajoute ici le panneau lesBoutons directement dans le containeur qui existe par défaut dans la fenêtre, ; ce containeur ne sera pas remplacé comme nous le faisions dans les versions précédentes. Le containeur d'un JFrame possède par défaut un gestionnaire de répartition de type BorderLayout ; comme ce gestionnaire nous convient, on n'en change pas et l'instruction :
    setLayout(new BorderLayout(5, 5)); qui figurait dans les versions précédentes n'est plus utile.
On rappelle que le gestionnaire de répartition d'un JPanel est par défaut de type FlowLayout.

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