Avant toute chose, sachez que le clic sur un bouton radio peut se réaliser de 2 façons différentes :
D' abord la façon classique : avec la souris, on clique sur le bouton radio.
Une autre façon consiste à sélectionner le bouton radio grâce à la touche tabulation (pointillés sur le bouton), puis on appui sur la barre
d' espace du clavier. C' est le même effet.
L' évènement généré par le clic sur un bouton radio est traitée par la méthode (forcément prédéfinie) actionPerformed(). Ou par la méthode
(forcément prédéfinie aussi) itemStateChanged(). Mais à la différence d' une case à cocher, les 2 évènements ne se produisent pas toujours
simultanément.
Imaginons 2 boutons radio radio1 et radio2 appartenant au même groupe de boutons. Même groupe signifie qu'un seul bouton du groupe peut être
sélectionné. Un seul à la fois.
Le clic sur radio1 est un évènement qui peut être traité par les 2 méthodes actionPerformed() et itemStateChanged(). Et ce, quelque soit l'état
de radio1. Etat sélectionné : radio1 ou état non sélectionné : radio1
En même temps, si le bouton sélectionné avant le clic sur radio1 était radio2, alors, il se produit forcément un autre évènement qui est la
non-sélection du bouton radio2. Cet évènement peut être traité par la méthode istemStateChanged().
Autrement dit, si aucun des 2 boutons n'était sélectionné avant le clic sur radio1, seul l'action sur radio1 est un évènement. Pas d'évènement
sur radio2. Forcément, puisqu'il ne s'y passe rien.
Trève d' explications. Allons-y pour les exemples.
Exemple 6 :
1. import javax.swing.*;
2. import java.awt.*;
3. import java.awt.event.*;
4.
5. class Fenetre extends JFrame implements ActionListener
6. {
7. private JRadioButton radio1, radio2; private JButton bouton;
8. public Fenetre()
9. {
10. setTitle("Une fenetre dynamique");
11. Container c = getContentPane();
12. c.setBackground(new Color(208, 208, 255));
13. setSize(500, 300);
14. c.setLayout(new FlowLayout());
15.
16. ButtonGroup groupeDeBoutons = new ButtonGroup();
17.
18. radio1 = new JRadioButton("RADIO 1");
19. groupeDeBoutons.add(radio1);
20. c.add(radio1);
21.
22. radio2 = new JRadioButton("RADIO 2");
23. groupeDeBoutons.add(radio2);
24. c.add(radio2);
25.
26. setLocationRelativeTo(this.getParent());
27.
28. radio1.addActionListener(this);
29. radio2.addActionListener(this);
30.
31. setDefaultCloseOperation(3);
32. }
33.
34.
34. public void actionPerformed(ActionEvent a)
35. {
36. Object source = a.getSource();
37.
38. if(source == radio1)
39. System.out.println("Action sur RADIO 1");
40. else
41. System.out.println("Action sur RADIO 2");
42. }
43. }
44.
45. public class TesterClicRadio
46. {
47. public static void main(String [] args)
48. {
49. Fenetre f = new Fenetre();
50. f.setVisible(true);
51. }
52. }
Compilez puis exécutez ce programme. Il sera affiché :
Une fenêtre graphique contenant 2 boutons appelés : RADIO 1 et RADIO 2. Cliquez sur RADIO 1, il sera affiché : Action sur RADIO 1. Cliquez sur
RADIO 2, il sera affiché RADIO 2.
Explications :
Un bouton radio n'a de sens que s'il n'est pas unique. Sinon, une case à cocher est à préférer. Et s'il y a plus d'un bouton radio, il est normal
qu'il appartienne à un groupe de boutons de sorte que la sélection d'un bouton radio désactive le bouton préalablement sélectionné. D'où
l'intérêt de créer un objet ButtonGroup (ligne 16).
Ligne 18 : on crée un bouton radio appelé RADIO 1. On l' ajoute au groupe(ligne 19). Puis on l'ajoute au conteneur c (ligne 20).
Même chose pour radio2 : lignes 22 à 24.
Ici, c'est l'objet Fenetre qui est écouteur puisque c'est sa classe qui implément l'interface ActionListener (ligne 5). C'est pourquoi la méthode
actionPerformed() est redéfinie dans la classe Fenetre. Lignes 28 : on associe l'objet écouteur (this) à l'objet raiod1. Même chose pour
l'objet radio2 en ligne 28
Dans la méthode actionPerforme(). La méthode getSource(), comme vous le savez déjà, retourne toujours un objet de type Object. Donc, tout objet,
quelque soit sa classe, peut avoir pour référence, la variable source. Lignes 38 à 41 : Si cet objet est radio1, afficher l'expression : action
sur RADIO 1. Sinon, afficher l'expression : action sur RADIO 2.
Exemple 7 :
1. import javax.swing.*;
2. import java.awt.*;
3. import java.awt.event.*;
4.
5. class Fenetre extends JFrame implements ItemListener
6. {
7. private JRadioButton radio1, radio2; private JButton bouton;
8. public Fenetre()
9. {
10. setTitle("Une fenetre dynamique");
11. Container c = getContentPane();
12. c.setBackground(new Color(208, 208, 255));
13. setSize(500, 300);
14. c.setLayout(new FlowLayout());
15.
16. ButtonGroup groupeDeBoutons = new ButtonGroup();
17.
18. radio1 = new JRadioButton("RADIO 1");
19. groupeDeBoutons.add(radio1);
20. c.add(radio1);
21.
22. radio2 = new JRadioButton("RADIO 2");
23. groupeDeBoutons.add(radio2);
24. c.add(radio2);
25.
26. setLocationRelativeTo(this.getParent());
27.
28. radio1.addItemListener(this);
29. radio2.addItemListener(this);
30.
31. setDefaultCloseOperation(3);
32. }
33.
34.
34. public void itemStateChanged(ItemEvent i)
35. {
36. Object source = i.getSource();
37.
38. if(source == radio1)
39. System.out.println("Action sur RADIO 1");
40. else
41. System.out.println("Action sur RADIO 2");
42. }
43. }
44.
45. public class TesterClicRadio2
46. {
47. public static void main(String [] args)
48. {
49. Fenetre f = new Fenetre();
50. f.setVisible(true);
51. }
52. }
Compilez puis exécutez ce programme. Il sera affiché :
Une fenêtre graphique contenant 2 boutons appelés : RADIO 1 et RADIO 2. Aucun des 2 boutons n'est sélectionné. Cliquez sur RADIO 1, il sera
affiché : Action sur RADIO 1. Cliquez sur RADIO 2, il sera affiché Action sur RADIO 1 et sur la ligne suivante, il sera affiché Action sur Radio2
Explications :
Souvenez-vous de ce que je vous ai dit sur l'action sur un bouton radio.
Le clic sur radio1 est un évènement qui peut être traité par les 2 méthodes actionPerformed() et itemStateChanged(). Et ce, quelque soit l'état
de radio1. Etat sélectionné : radio1 ou état non sélectionné : radio1
En même temps, si le bouton sélectionné avant le clic sur radio1 était radio2, alors, il se produit forcément un autre évènement qui est la
non-sélection du bouton radio2. Cet évènement peut être traité par la méthode istemStateChanged().
Autrement dit, si aucun des 2 boutons n'était sélectionné avant le clic sur radio1, seul l'action sur radio1 est un évènement. Pas d'évènement
sur radio2. Forcément, puisqu'il ne s'y passe rien.
J'ai utilisé cette fois, l'interface ItemListener. Au début, pas de bouton sélectionné. Donc, l'action sur radio1 conduit à un seul évènement.
C'est pourquoi on voit s'afficher seulement Action sur RADIO 1. Mais en cliquant sur le bouton radio2, on a 2 évènements qui se produisent.
L' un qui est d'abord la non sélection de radio1. C'est pourquoi on voit s'afficher la phrase : Action sur RADIO 1 Puis l'autre évènement
qui est la sélection de radio2. C' est pourquoi en ligne suivante, on voit s'afficher : Action sur RADIO 2
D'où le conseil suivant :
Lorsque vous traitez un évènement survenu lors du clic sur un bouton radio, préférez la méthode actionPerformed(). Dans les logiciels de commerce,
vous avez dû le remarquer, on ne traite (presque) jamais l' évènement que constitue la non sélection d'un bouton radio. L'utilisateur d'un
logiciel clique sur un bouton radio et il sait que ce qui se produit est forcément la conséquence de son choix et pas du tout la non dé-sélection
d'un bouton qu'il n'a même pas (ou plus) regardé en cliquant.
De manière générale toutefois, on préfère laisser à l'utilisateur du logiciel le temps de sélectionner un bouton radio. Et c'est le clic sur un
bouton simple qui validera son choix. C'est plus prudent. Comme dans l'exemple ci-dessous.
Compilez puis exécutez ce programme. Il sera affiché :
Une fenêtre graphique contenant 2 boutons radio appelés RADIO 1 et RADIO 2. En plus, un bouton simple appelé BOUTON DE VALIDATION.
Cliquez sur l'un ou l'autre des boutons. Il ne se passe rien.
Le clic d'un bouton désactive l'autre si ce dernier était préselectionné.
Le clic sur le bouton de validation donne l'état des 2 boutons : sélectionné ou non sélectionné.
Explications :
Le clic sur un bouton Radio ne donne rien parce que aucun des boutons n'est associé à un objet écouteur. Par contre, le clic sur le bouton conduit
à l'éxécution de la méthode actionPerformed(). Normal, le bouton simple est associé à un objet écouteur. Cet objet est la fenêtre elle-même.
Regardez ligne 30 : this représente la fenêtre puisque c'est sa classe qui implémente l'interface ActionListener qui contient le méthode
actionPerformed().
J'ai reçu un message d'une personne me demandant pourquoi affiche-t-on des choses sur la fenêtre console, alors qu'on est en programmation
graphique? ... Pourquoi ne pas afficher directement sur la fenêtre graphique.
Réponse :
Pour l'instant, nous apprenons en mettre en oeuvre la programmation évènementielle à travers divers composants graphiques. Ce n'est pas grave si
on affiche encore en fenêtre console. Mais à partir du prochain chapitre, nous allons commencer à afficher sur la fenêtre graphique. cela dit,
rassurez-vous, nous aurons au moins un chapitre consacré aux véritables exercices corrigés en programmation graphique. Dans ce cas, tout sera sur
la fenêtre graphique.
Débutants java - Débutants en java - Débutant en java - Débutants en java - Débuter en java - Debutant java - Debuter en java - initiation java - cours de java - tutorial java - les tableaux en java -