Utilisation de boutons à cocher

     

Notre application prend différents aspects :

      
ou avec une applet (que vous pouvez essayer ci-dessous) :

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é)

Dans l'application (ou dans l'applet), il y a deux sortes de boutons à cocher :

Dans l'application :

Le programme utilise la classe ArdoiseMonde qui modélise la partie gauche de l'application, celle où on voir le disque ou le monde, entouré ou pas. Elle ne présente pas de difficulté ni de nouveauté, nous vous la laissons découvrir sous le lien. Il y a quelques lignes qui concernent le chargement d'une image, sujet qui fait l'objet d'une autre section et dont vous pouvez repousser l'étude.

import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JCheckBox;
import javax.swing.JRadioButton;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;

class ListenerTaille implements ItemListener {
int taille;
ArdoiseMonde ardoise;

ListenerTaille(int taille, ArdoiseMonde ardoise) {
this.taille = taille;
this.ardoise = ardoise;
}

public void itemStateChanged(ItemEvent evt) {
ardoise.setRayon(taille);
ardoise.repaint();
}
}

public class FenetreCocher extends JFrame {
ArdoiseMonde ardoise = new ArdoiseMonde();
JRadioButton petit = new JRadioButton("petit", true);
JRadioButton moyen = new JRadioButton("moyen", false);
JRadioButton grand = new JRadioButton("grand", false);
JCheckBox monde;
JCheckBox tour = new JCheckBox("entoure", false);
ImageIcon icone;

public FenetreCocher() {
ButtonGroup groupe = new ButtonGroup();
Box panneauRadio = Box.createVerticalBox();
Box panneauCocher = Box.createVerticalBox();
Box panneauChoix = Box.createVerticalBox();
icone = new ImageIcon(ardoise.getImage().getScaledInstance
(10, 10, Image.SCALE_DEFAULT));
monde = new JCheckBox( "monde", icone);
petit.addItemListener(new ListenerTaille(ArdoiseMonde.PETIT, ardoise));
moyen.addItemListener(new ListenerTaille(ArdoiseMonde.MOYEN, ardoise));
grand.addItemListener(new ListenerTaille(ArdoiseMonde.GRAND, ardoise));
tour.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
ardoise.inverserEntourer();
ardoise.repaint();
}
});

monde.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent evt) {
ardoise.inverserFaireMonde();
ardoise.repaint();
}
});
groupe.add(petit);
groupe.add(moyen);
groupe.add(grand);
panneauRadio.add(petit);
panneauRadio.add(moyen);
panneauRadio.add(grand);
panneauRadio.setBorder(BorderFactory.createLineBorder(Color.GREEN));
panneauCocher.add(monde);
panneauCocher.add(tour);
panneauCocher.setBorder(BorderFactory.createLineBorder(Color.RED));
panneauChoix.add(panneauRadio, BorderLayout.NORTH); panneauChoix.add(panneauCocher, BorderLayout.SOUTH);
panneauChoix.setBorder(BorderFactory.createLoweredBevelBorder());
add(ardoise, BorderLayout.CENTER);
add(panneauChoix, BorderLayout.EAST);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setVisible(true);
}
}

class EssaiCocher {
public static void main(String[] arg) {
new FenetreCocher();
}
}
Vous pouvez voir ici le fichier FenetreCocher.java ainsi que Ardoise.java et l'image du monde.
Et si vous voulez voir le code de l'applet...
ItemListener: l'interface java.awt.event.ItemListener contient la déclaration de la méthode itemStateChanged. Elle permet, en l'implémentant, de définir des listenerss pour les boutons à cocher et pour différents types de listes proposant des choix entre différents items.JRadioButton petit =
new JRadioButton("petit", true); : ce constructeur donne en premier paramètre le nom du bouton et en second paramètre une valeur booléenne indiquant si le bouton doit apparaître coché (valeur true) ou non coché (valeur false).
ButtonGroup : la classe javax.Swing.ButtonGroup est destinée à contenir plusieurs boutons. Un et un seul de ses boutons sera sélectionné simultanément. Lorsque l'utilisateur sélectionne un des boutonss, l'instance de ButtonGroup regroupant les boutons s'occupe de changer l'état des autres boutons. La bouton sélectionné à l'initialisation peut être précisé comme dans notre programme à la création du groupe. On utilisera souvent cette classe pour des boutons-radios comme ici. Néanmoins, il n'est pas indispensable de mettre les boutons dans un ButtonGroup.
Box panneauRadio = Box.createVerticalBox(); : la classe javax.swing.Box modélise un composant léger, du même genre qu'un JPanel, mais il est muni d'un gestionnaire de répartition de type BoxLayout ; un tel gestionnaire permet, selon le choix d'un attribut, de mettre les sous-composants les uns en-dessous des autres ou les uns à côté des autres, de telle sorte qu'ils remplissent si possible tout l'espace disponible. Les méthodes d'instances de la classe Box telles que createVerticalGlue, createHorizontalGlue, createVerticalStrut ou createHorizontalStrut permettent de la souplesse dans l'ajout des sous-composants et méritent d'être connues (voir la documentation de l'API), On utilise ici la méthode statique createVerticalBox de la classe Box qui crée une instance de la classe Box destinée à mettre les sous-composants les uns en-dessous des autres.
new ImageIcon(ardoise.image.getScaledInstance (10, 10, Image.SCALE_DEFAULT)); : on demande ici de construire une instance de la classe ImageIcon qui aura pour dessin une réduction de l'image "image" de l'ardoise. Cette image sera de 10 pixels sur 10 pixels.
petit.addItemListener(new ListenerTaille(ArdoiseMonde.PETIT, ardoise)); : cette instruction indique, que lorsqu'il y aura un changement sur le choix avec le bouton petit, la méthode ItemStateChanged de new ListenerTaille(ArdoiseMonde.PETIT, ardoise) sera invoquée.
groupe.add(petit); : on ajoute ainsi le bouton petit à l'instance groupe de la classe ButtonGroup.
panneauRadio.setBorder(BorderFactory.createLineBorder(Color.GREEN)); : l'ensemble les boutons donnant la taille du dessin sera entouré d'une ligne verte. La classe javax.swing.BorderFactory contient beaucoup de méthodes statiques pour tracer des bords à des composants graphiques ou pour leur donner un effet de relief.
panneauChoix.setBorder(BorderFactory.createLoweredBevelBorder()); : le "panneauChoix" sera en relief "creux".
public void itemStateChanged(ItemEvent evt) : cette méthode doit être définie parce que notre classe implémente l'interface ItemListener. C'est cette méthode qui sera invoquée lorsqu'un des boutons sera coché parce que nos boutons ont cet "ItemListener" comme "listener".
© Charon Irène, ENST - Paris 2010