Les boutons de commande

Comme leur nom l'indique, les boutons de commande sont destinés à lancer une commande (ou une action) lorsque l'utilisateur a cliqué sur leur surface. Grâce à un effet graphique ils donnent l'impression d'avoir été enfoncés, puis relachés.

La classe Button

Les boutons de commande sont représentés par la classe Button du package java.awt. Ils dérivent directement de la classe Component.

	java.lang.Object
	   |
	   +----java.awt.Component
	           |
	           +----java.awt.Button

On construit un bouton en indiquant le texte qu'il contiendra. Par exemple, pour obtenir un bouton dont le libellé est "Encore", on écrira :

	Button b=new Button("Encore");

Lorsqu'on appuie sur le bouton on déclenche un évènement de type ActionEvent. Cet évènement doit être traité par une classe qui implémente l'interface ActionListener, ce sera pour nous l'applet qui contient le bouton. Pour définir la classe chargée de réagir à l'évènement de type ActionEvent généré par le bouton, on utilise la méthode addActionListener(ActionListener). Enfin pour caractériser l'action que doit déclencher le bouton par une chaîne de caractères on utilise la méthode setActionCommand(String). Si on ne le fait pas, c'est le libellé du bouton qui est utilisé.

Insertion dans une applet

Créons une applet qui contient un bouton "Ajouter" et qui affiche le nombre 0. A chaque fois qu'on appuie sur le bouton "Ajouter", le nombre affiché doit augmenter d'une unité.

Déclaration de l'applet

Comme l'applet sera chargée de réagir aux évènements générés par le bouton, elle devra implémenter l'interface ActionListener qui contient la méthode actionPerformed(ActionEvent evt). La classe ActionEvent contient la méthode getActionCommand qui renvoie la chaîne qui caractérise l'action à réaliser.
On obtient :

	import java.awt.*;
	import java.awt.event.*;
	import java.applet.*;

	public class bouton1 extends Applet 
	 implements ActionListener {
	 
	 int nombre;
	 
	 public void init() {
	  nombre=0;
	 }
 
	 public void actionPerformed(ActionEvent evt) {
	 }
	 
	 public void paint(Graphics g) {
	  g.drawString(""+nombre,50,80);
	 }
 
	}

Insertion du bouton

L'insertion du bouton dans l'applet aura lieu dans la méthode init. Il y a trois opérations à réaliser : créer le bouton, l'insérer, indiquer que la commande qu'il génère sera prise en compte par l'applet. Cela donne :

	public void init() {
	 nombre=0;
	 //création
	 Button b = new Button("Ajouter");
	 //insertion
	 add(b);
	 //choix de l'écouteur
	 b.addActionListener(this);
	}

Réaction aux clics sur le bouton

La réaction aux clics sur le bouton se fait dans la méthode actionPerformed. On vérifie l'origine de la commande et on l'exécute.

	public void actionPerformed(ActionEvent evt) {
	 if (evt.getActionCommand().equals("Ajouter")) {
	  //on augmente nombre d'une unité
	  nombre++;
	  //on réaffiche
	  repaint();
	 }
	}

Test

On obtient l'applet suivante :

Remarques :
 1- la méthode paint de l'applet ne fait pas référence au bouton, celui-ci s'affiche automatiquement.
 2- nous n'avons à aucun moment précisé la position du bouton, celle-ci est aussi déterminée de façon automatique.

Avec 2 boutons et des couleurs

Complétons l'applet précédente avec un bouton "Retirer" qui enlèvera une unité au nombre affiché et qui utilisera des couleurs. Nous ajouterons un champ fonte utilisé pour l'affichage et nous complèterons les trois méthodes init, paint et actionPerformed.

Méthode init

Après avoir choisi des couleurs pour l'applet, nous ajoutons les boutons.

	public void init() {
	 //pour l'applet
	 nombre=0;
	 fonte=new Font("Monospace",Font.BOLD,20);
	 setBackground(Color.yellow);
	 setForeground(Color.blue);
	 // ajout du 1er bouton
	 Button b = new Button("Ajouter");
	 add(b);
	 b.setActionCommand("plus");
	 b.addActionListener(this);
	 b.setBackground(new Color(0,128,0));
	 b.setForeground(Color.yellow);
	 // ajout du 2ème bouton
	 b=new Button("Retirer");
	 add(b);
	 b.setActionCommand("moins");
	 b.addActionListener(this);
	 b.setBackground(new Color(128,0,0)); 
	 b.setForeground(Color.yellow);
	}

Gestion des évènements

La chaîne caractérisant les actions nous permet de déterminer la conduite à adopter.

	public void actionPerformed(ActionEvent evt) {
	 if (evt.getActionCommand().equals("plus")) {
	  //c'est le premier bouton
	  nombre++;
	  repaint();
	 }
	 else if (evt.getActionCommand().equals("moins")) {
	  //c'est le deuxième bouton
	  nombre--;
	  repaint();
	 } 
	}

Méthode paint

Il suffit d'activer la fonte choisie avant d'afficher le nombre.

	public void paint(Graphics g) {
	 g.setFont(fonte);
	 g.drawString(""+nombre, 50, 80);
	}

Test

On obtient le résultat suivant :



Retour au menu