Utiliser un bouton de choix

     

alt : l'applet n'est pas visible par votre navigateur(dans le menu Outils, Modules complémentaires, activer le plugin Java(TM) Platform SE 6 U32 6.0.320.5 s'il est désactivé)

Un bouton de choix joue un peu le même rôle qu'un menu déroulant ou qu'une liste de choix. La classe correspondante est la classe javax.swing.JComboBox.

Vous pouvez voir ci-dessous le code d'une application qui fait sensiblement la même chose que l'applet ci-dessus.

L'utilisation d'un bouton de choix n'est pas compliquée et la plupart des techniques du programme ci-dessous ont déjà été utilisées dans les programmes précédents.

Les boutons de choix que nous utilisons sont "non éditables". On pourrait en faire des boutons "éditables" ; l'item sélectioné serait alors une zone de texte modifiable.

La classe JComboBox possède différents constructeurs ; par exemple, l'un d'entre eux prend en paramètre un "Vector" ; les items du bouton correspondent alors aux différents objects du "Vector" indiqué. Nous utilisons ici un constructeur sans paramètre.

Nous vous encourageons, comme pour toutes les classes que nous vous présentons, à consulter l'API pour en savoir plus.

import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.BorderLayout;

public class BoutonChoix extends JFrame implements ItemListener {
JComboBox choix = new JComboBox();
ArdoiseChoix ardoise = new ArdoiseChoix();

public BoutonChoix() {
JPanel panneau = new JPanel();

choix.addItem("noir");
choix.addItem("rouge");
choix.addItem("vert");
choix.addItem("bleu");
choix.addItem("jaune");
choix.addItemListener(this);
panneau.add(choix);

add(panneau, BorderLayout.NORTH);
add(ardoise, BorderLayout.CENTER);

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

public void itemStateChanged(ItemEvent evt) {
ardoise.setForeground(getCouleur(choix.getSelectedItem()));
}

Color getCouleur(Object s) {
if (s.equals("rouge")) return Color.RED;
else if (s.equals("vert")) return Color.GREEN;
else if (s.equals("bleu")) return Color.BLUE;
else if (s.equals("jaune")) return Color.YELLOW;
return Color.BLACK;
}
}

class ArdoiseChoix extends JPanel {
ArdoiseChoix() {
setPreferredSize(new Dimension(100, 100));
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.fillOval(10,10,80,80);
}
}

class EssaiBoutonChoix {
public static void main(String[] arg) {
new BoutonChoix();
}
}

Vous pouvez voir :


choix.addItem("noir"); : la méthode addItem de la classe JComboBox prend en paramètre un Object qu'elle ajoute à la liste des items du bouton. Dans le bouton de choix, les items, qui sont donc des Object(s), seront traduits en chaînes de caractères grâce à la méthode toString.
choix.getSelectedItem() : la méthode getSelectedItem de la classe JComboBox retourne l'"Object" sélectionné.
ardoise.setForeground(getCouleur(choix.getSelectedItem())); : on demande à ce que la couleur d'avant-plan, c'est-à-dire la couleur par défaut avec laquelle un dessin est effectué, ou encore la couleur qui sera transmise à l'objet Graphics obtenu lors d'un appel à la méthode getGraphics(), corresponde à la couleur sélectionnée. Par ailleurs, la méthode getSelectedItem de la classe JComboBox retourne un "Object", ce qui nous contraint à effectuer la conversion de classe de Object vers String.
©Irène Charon, Télécom ParisTech 2011