ou avec une applet (que vous pouvez essayer ci-dessous) :
Dans l'application (ou dans l'applet), il y a deux sortes de boutons à cocher :
les boutons de nom petit, moyen et grand sont regroupés dans un ensemble, comme vous le verrez dans le programme, et cela entraîne qu'on peut cocher qu'un seul de ces boutons. Ces boutons sont des instances de la classe javax.swing.JRadioButton. On les appelle des boutons-radios.
les boutons de nom monde et tour sont isolés : ils peuvent être cochés indépendamment. Ces boutons sont des instances de la classe javax.swing.JCheckBox.
Dans l'application :
le bouton de nom monde est représenté par une petite îcone.
le groupe de boutons-radios correspondant à trois tailles est entouré d'une ligne verte obtenue en utilisant la classe BorderFactory.
le groupe des deux autres boutons est entouré d'une ligne rouge.
l'ensemble des boutons est dans une zone en "relief creux" obtenue en utilisant encore la classe BorderFactory.
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 implementsItemListener {
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();
}
}