← (précédent) D.8 Evènements sur les boites combo
D.10 gestionnaires de mise en forme
Accueil S O M M A I R E

D.9 Evènements sur les boites de dialogue

L' apparition des boites de dialogues sont dues en général au traitement d'autres évènements. Par exemple, un champ non ou mal rempli. La boite de message invite l'utilisateur à corriger sa saisie.
La disparition des boites de dialogues est due en cliquant sur l'un des boutons contenus dans la boite. Donc, pas d'interface à implémenter en principe.

D.9.1 Les boites de message

 Exemple 1 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {
6.          public Fenetre(String titre)
7.          {
8.               setTitle(titre);
9.               setSize(500, 300);
10.              Container c = getContentPane();
11.              c.setLayout(new FlowLayout() );
12.              c.setBackground(new Color(208, 255, 208) );
13.              setLocationRelativeTo(this.getParent()); 
14.              setDefaultCloseOperation(3);
15.         }
16.    }
17.     
18.       
19.    public class TesterBoiteMessage
20.    {
21.         public static void main(String [] args)
22.         {
23.              JFrame f = new Fenetre("boites de message");
24.              f.setVisible(true);
25.              JOptionPane.showMessageDialog(f, "Bonjour");
25.         }
26.    }
Compilez puis exécutez ce programme, il sera affiché :

Une fenêtre colorée en vert clair. Elle a pour titre : boites de message". A l'intérieur de cette fenêtre, se trouve une autre qui est tout simplement la boite de message dont le titre est "Message" et le message est "Bonjour". En plus de ça, on y voit un bouton appelé Ok et une image qui est un cercle de couleur bleu très clair à l'intérieur duquel se trouve la lettre i.

Explications :

Lignes 8 à 13 :
Les titre, taille de la fenêtre, le conteneur coloré et l'apparition de la fenêtre au centre de l'écran, on n'a plus besoin de vous l'expliquer.

Dans la méthode main(), en ligne 25 : on appelé la méthode showMessageDialog() de la classe JOptionPane. Cette méthode (static) permet de créer une fenêtre appelée boite de message. La méthode requiert 2 arguments qui sont :
premier argument = fenêtre dans laquelle doit apparaître la boite de dialogue. Ici, c'est f. On l'appelle aussi, la fenêtre parent.
deuxième argument = message à faire apparaître dans la boite de message.

Si vous essayez de manipuler la fenêtre parent, la boite de message se met à clignoter. Il faut d'abord la faire disparaître avant de manipuler le parent. On fait disparaître la boite de message en cliquant sur le bouton Ok ou en cliquant sur la croix qu'on voit sur le coin droit et haut de la boite. Comme toute fenêtre de n'importe quel logiciel qu'on trouve dans le commerce.

 Exemple 2 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {
6.          public Fenetre(String titre)
7.          {
8.               setTitle(titre);
9.               setSize(500, 300);
10.              Container c = getContentPane();
11.              c.setLayout(new FlowLayout() );
12.              c.setBackground(new Color(208, 255, 208) );
13.              setLocationRelativeTo(this.getParent()); 
14.              setDefaultCloseOperation(3);
15.         }
16.    }
17.     
18.       
19.    public class TesterBoiteMessage2
20.    {
21.         public static void main(String [] args)
22.         {
23.              JFrame f = new Fenetre("boites de message");
24.              f.setVisible(true);
25.              JOptionPane.showMessageDialog(f, "Un seul prenom suffit", "Avertissement", 2);
25.         }
26.    }
Compilez puis exécutez ce programme, il sera affiché :

Une fenêtre colorée en vert clair. Elle a pour titre : "boites de message". A l'intérieur de cette fenêtre, se trouve une autre fenêtre qui est tout simplement la boite de message dont le titre est "Avertissement" et le message est "Un seul prenom suffit". En plus de ça, on y voit un bouton appelé Ok et une image qui est un triangle à l'intérieur duquel se trouve un point d'exclamation.

Explications :

La méthode showMessageDialog() de la classe JOptionPane possède une autre variante (surdéfinition). Celle utilisée ci-dessus requiert 4 arguments. Le premier est l'objet fenêtre sur lequel doit apparaître la boite de dialogue. Le deuxième est la chaine de caractères qui apparaît dans la boite de dialogue. Le troisème est la chaine de caractères représentant le titre de la boite de dialogue. Et enfin, le 4ème argument représente le type d'image qui doit apparaître dans la boite. Ce nombre est la valeur d'une constante de type int.

JOptionPane.ERROR_MESSAGE = 0; un octagone orange dans lequel on voit une croix rouge.
JOptionPane.INFORMATION_MESSAGE = 1; Un cercle de couleur bleu très clair à l'intérieur duquel se trouve la lettre i.
JOptionPane.WARNING_MESSAGE = 2;Un triangle jaune à l'intérieur duquel se trouve un point d'exclamation.
JOptionPane.QUESTION_MESSAGE = 3; Un carré vert dans lequel se trouve un point d'interrogation.
JOptionPane.PLAIN_MESSAGE = -1; Aucune image n'est affichée.

Vous pouvez utilisez soit la valeur constante ou le nom de la constante. N'oubliez pas de respecter les majuscules. Il est possible que les couleurs des images évoquées ci-dessus ne correspondent. C'est possible parce que selon l'environnement de programmation, windouws, linux, mac, etc... il arrive qu'une image soit légèrement différente.

Ici, on a fait apparaître la boite de message en même temps que la fenêtre parente. En général, cette boite de message apparaît après la fenêtre parent.
Elle apparaît surtout, après que l'utilisateur ait accompli une action. Et ce, de façon anormale. Alors, la boite de message informe l'utilisateur la situation dans laquelle il se trouve.

Nous verrons dans les exercices corrigés, les bonnes situations dans lesquelles apparaissent ces boites de message.

D.9.2 Les boites de confirmation

 Exemple 3 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {
6.          public Fenetre(String titre)
7.          {
8.               setTitle(titre);
9.               setSize(500, 300);
10.              Container c = getContentPane();
11.              c.setLayout(new FlowLayout() );
12.              c.setBackground(new Color(208, 255, 208) );
13.              setLocationRelativeTo(this.getParent()); 
14.              setDefaultCloseOperation(3);
15.         }
16.    }
17.     
18.       
19.    public class TesterBoiteConfirmation
20.    {
21.         public static void main(String [] args)
22.         {
23.              JFrame f = new Fenetre("boites de dialogue");
24.              f.setVisible(true);
25.              JOptionPane.showConfirmDialog(f, "Avez-vous bien lu ?");
25.         }
26.    }
Compilez puis exécutez ce programme, il sera affiché :

Une fenêtre colorée en vert clair. Elle a pour titre : "boites de dialogue". A l'intérieur de cette fenêtre, se trouve une autre fenêtre qui est tout simplement la boite de dialogue dont le titre est "Select an option" ou "Selectionnez une option" si votre environement a été traduit en français. Et le message est "Avez-vous bien lu ?". En plus de ça, on y voit 3 boutons appelés respectivement Yes, NO et Cancel ou en Français Oui, Non et Annuler.

Explications :

C'est la fameuse boite de confirmation java. Elle est classique. Car, il existe des variantes. Avant de parler des variantes, sachez que la méthode showConfirmDialog() de la classe JOptionPane (ligne 25) permet de faire apparaître cette fenêtre. Le premier argument est la fenêtre graphique à l'intérieur de laquelle doit apparaitre la boite de confirmation.
Cette méthode retourne un nombre entier dont la valeur permet une réaction selon le bouton cliqué.

Cliquez sur le bouton Oui (ou Yes) et la valeur retournée est : 0
Cliquez sur le bouton Non (ou No) et la valeur retournée est : 1
Cliquez sur le bouton Annuler (ou Cancel) et la valeur retournée est : 2
Cliquez maintenant sur le bouton contenant la croix. C'est le bouton classique d'une fenête graphique. Elle est située à l'extreme droite et tout en haut de la fenêtre graphique. C'est le bouton qu'on clique pour fermer la fenêtre. Si tel est le cas, la valeur retournée est -1.

 Exemple 4 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {    
6.          public Fenetre(String titre, JLabel etiket)
7.          {
8.              setTitle(titre);
9.              setSize(500, 300);
10.             Container c = getContentPane();
11.             c.setLayout(new FlowLayout() );
12.             c.setBackground(new Color(208, 255, 208) );
13.             c.add(etiket);
14.             setLocationRelativeTo(this.getParent()); 
15.             setDefaultCloseOperation(3);
16.          }   
17.     }      
18.     
19.    public class TesterBoiteConfirmation2
20.    {
21.         public static void main(String [] args)
22.         {
23.              JLabel etiket = new JLabel("texte initial");
24.              JFrame f = new Fenetre("boites de dialogue", etiket);
25.              f.setVisible(true);
27.              int valRetour = JOptionPane.showConfirmDialog(f, "Avez-vous bien lu ?");
28.              
29.              switch (valRetour)
30.              {
31.                  case 0:
32.                  etiket.setText("clic sur bouton Oui ou Yes");
33.                  break;
34.                  
35.                  case 1:
36.                  etiket.setText("clic sur bouton Non ou No");
37.                  break;
38.                  
39.                  case 2:
40.                  etiket.setText("clic sur bouton Annuler ou Cancel");
41.                  break;
42.                  
43.                  default:
44.                  etiket.setText("clic sur fermeture fenêtre");
45.                  break;
46.                  
47.             }
48.        }
49.    }
Compilez puis exécutez ce programme, il sera affiché :

Une fenêtre colorée en vert clair. Elle a pour titre : "boites de dialogue". A l'intérieur de cette fenêtre, se trouve une autre fenêtre qui est tout simplement la boite de dialogue dont le titre est "Select an option" ou "Selectionnez une option" si votre environement a été traduit en français. Et le message est "Avez-vous bien lu ?". En plus de ça, on y voit 3 boutons appelés respectivement Yes, NO et Cancel ou en Français Oui, Non et Annuler.

Sur la fenêtre graphique, se trouve une étiquette dont le nom est "texte initial".
Cliquez sur le bouton Oui ou yes, l'étiquette affiche le message "clic sur bouton Oui ou Yes"
Fermez alors la fenêtre graphique. Puis exécutez à nouveau. La boite de confirmation s'affiche à nouveau. Cliquez sur un autre bouton et le message correspondant sera affiché sur l'étiquette.


Explications :

Remarquez d'abord que le constructeur de la classe Fenetre (ligne 6) a cette fois, 2 arguments. Parce que je veux manipuler la valeur de l'étiquette dans la classe TesterBoiteConfirmation2. La variable de type JLabel etiket est donc le deuxième argument de ce constructeur. Ce qui me permet de créer la fenêtre en y mettant à ce moment là, une étiquette que j'aurais déclarée dans la classe TesterBoiteConfirmation2 (ligne 23). Ce qui me permet alors de manipuler cette variable dans sa propre classe.

Puisque la méthode showConfirmDialog() de la classe JOptionPane renvoie une valeur de type int. On peux alors la mettre dans une variable de type int (ligne 27). Cette variable appelée valRetour aura donc la valeur correspondant au clic effectué dans la boite de confirmation.
De la ligne 29 à la ligne 45, on a une structure conditionnelle de type switch qui permet d'afficher un texte sur l'étiquette (l'objet JLable etiket) qui dépend du clic.
Une variante de la méthode showConfirmDialog() permet de choisir le nombre et la nature des boutons qui apparaissent dans la boite de confirmation. En plus, on peut choisir le titre de la boite.

Cette variante requiert 4 arguments :
Le premier est naturellement la fenêtre graphique dans laquelle doit apparaître la boite de confirmation.
Le 2ème est le message qui doit apparaitre dans la boite de dialogue.
Le troisième argument est le titre de la boite de dialogue.
Le 4ème est le type de boite de dialogue.

Ce 4ème argument est une constance dont les valeurs sont :
JOptionPane.DEFAULT_OPTION = -1; La boite contient 1 seul bouton appelé Ok. Il y a aussi une image qui est un carré contenant un point d'interrogation.

JOptionPane.YES_NO_OPTION = 0; La boite contient 2 boutons qui sont oui et non ou en anglais Yes et No. Il y a aussi une image qui est un carré contenant un point d'interrogation.

JOptionPane.YES_NO_CANCEL_OPTION = 1; La boite contient 3 boutons qui sont oui et non et annuler ou en anglais : Yes et No et Cancel. Il y a aussi une image qui est une carré contenant un point d'interrogation.

JOptionPane.OK_CANCEL_OPTION = 2; La boite contient 2 boutons qui sont Ok et annuler ou en anglais : Ok et Cancel. Il y a aussi une image qui est une carré contenant un point d'interrogation.

Naturellement, on peut utiliser pour ce 4ème argument, soit le nom de la variable, soit la valeur de cette variable.
 Exemple 5 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {    
6.          public Fenetre(String titre, JLabel etiket)
7.          {
8.              setTitle(titre);
9.              setSize(500, 300);
10.             Container c = getContentPane();
11.             c.setLayout(new FlowLayout() );
12.             c.setBackground(new Color(208, 255, 208) );
13.             c.add(etiket);
14.             setLocationRelativeTo(this.getParent()); 
15.             setDefaultCloseOperation(3);
16.          }   
17.     }      
18.     
19.    public class TesterBoiteConfirmation3
20.    {
21.         public static void main(String [] args)
22.         {
23.              JLabel etiket = new JLabel("texte initial");
24.              JFrame f = new Fenetre("boites de dialogue", etiket);
25.              f.setVisible(true);
27.              int valRetour = JOptionPane.showConfirmDialog(f, "message de la boite", "titre", -1);
28.              
29.              switch (valRetour)
30.              {
31.                  case 0:
32.                  etiket.setText("clic sur bouton Oui ou Yes");
33.                  break;
34.                  
35.                  case 1:
36.                  etiket.setText("clic sur bouton Non ou No");
37.                  break;
38.                  
39.                  case 2:
40.                  etiket.setText("clic sur bouton Annuler ou Cancel");
41.                  break;
42.                  
43.                  default:
44.                  etiket.setText("clic sur fermeture fenêtre");
45.                  break;
46.                  
47.             }
48.        }
49.    }
Ce programme est le même qu'en exemple 4. A une exception près. La ligne 27. Cette fois, nous utilisons l'autre variante de la méthode showConfirmDialog(). l'argument f est la fenêtre graphique dans laquelle apparaitra la boite de confirmation. La chaine de caractères "message" apparaitre dans la boite de confirmation. La chaine de caractères "titre" sera le tire de la boite. Puis -1 est la valeur de la constante JOptionPane.DEFAULT_OPTION.

Compilez puis exécutez ce programme. Il sera affiché :

Une fenêtre colorée en vert clair. Elle a pour titre : "boite de dialogue". A l'intérieur de cette fenêtre, se trouve une autre fenêtre qui est tout simplement la boite de confirmation dont le titre est "titre". Et le message est "message de la boite".
En plus de ça, on y voit un seul bouton Ok et l'image point d'interrogation dans un carré.
Cliquez sur le bouton Ok, la boite disparaît et le message de l'étiquette deviennt "clic sur bouton Oui ou Yes".


Explications :

Cette variante de la méthode showConfirmDialog() de la classe JOptionPane renvoie elle aussi une valeur de type int.
La valeur zéro lorsqu'on clique sur le bouton Ok ou sur le bouton oui (ou Yes en anglais). C'est pour le message de l'étiquette devient "clic sur bouton Oui ou Yes".

Attention : Sachez que les boutons Yes (ou oui en français) et Ok n'apparaissent jamais en même temps. Il n'y aura donc aucune ambiguité.

La valeur 1 lorsqu'on clique sur le bouton No ( ou Non en français).

La valeur 2 lorsqu'on clique sur le bouton Cancel ou annuler.

La valeur -1 lorsque on clique sur la croix representant le bouton de fermeture de toutes les fenêtre graphiques.

Changez le programme ci-dessus en ligne 27. Donnez au 4ème argument de la méthode showConfirmDialog() la valeur 0. La boite de confirmation qui apparaitra aura 2 boutons : yes et No ou en français, Oui et Non.

Cliquez sur Oui ou Yes. Le message qui sera affiché sur l'étiquette sera alors : clic sur bouton Oui ou Yes. Normal, la valeur renvoyée par le clic sur le bouton est 0.
Cliquez sur No ou Non. Le message qui sera affiché sur l'étiquette sera alors : clic sur bouton Non ou No. Normal, la valeur renvoyée sera alors 1.

Changez le programme ci-dessus en ligne 27. Donnez au 4ème argument de la méthode showConfirmDialog() la valeur 1. La boite de confirmation qui apparaitra aura 3 boutons : yes et No et Cancel ou en français, Oui et Non et annuler

Cliquez sur Cancel (ou annuler en français). Le message qui sera affiché sur l'étiquette sera alors : clic sur bouton Annuler ou Cancel. Normal, la valeur renvoyée sera alors 2.

Cliquez sur la croix de la fenêtre. C'est à dire, le bouton classique de fermeture d'une fenêtre. Le message qui sera affiché sur l'étiquette sera alors : clic sur fermeture fenêtre. Normal, la valeur renvoyée sera alors -1. C'est le cas par défaut.

D.9.3 Les boites de saisie

 Exemple 6 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {
6.          public Fenetre(String titre)
7.          {
8.               setTitle(titre);
9.               setSize(500, 300);
10.              Container c = getContentPane();
11.              c.setLayout(new FlowLayout() );
12.              c.setBackground(new Color(208, 255, 208) );
13.              setLocationRelativeTo(this.getParent()); 
14.              setDefaultCloseOperation(3);
15.         }
16.    }
17.     
18.       
19.    public class TesterBoiteSaisie
20.    {
21.         public static void main(String [] args)
22.         {
23.              JFrame f = new Fenetre("boites de saisie");
24.              f.setVisible(true);
25.              JOptionPane.showInputDialog(f, "Ici, votre texte");
26.         }
27.    }
Compilez puis exécutez ce programme, il sera affiché :

Une fenêtre colorée en vert clair. Elle a pour titre : boites de saisie". A l'intérieur de cette fenêtre, se trouve une autre qui est tout simplement la boite de saisie dont le titre est "Input" (ou "Entrée" en Français). En plus de ça, on y voit un champ de saisie dans lequel vous pouvez saisir un texte. Le message de la boite de dialogue est "Ici, votre texte". On y voit aussi 2 boutons Ok et Cancel (ou en Français, Ok et Annuler).
Entrez un texte et cliquez sur n'importe lequel des 2 boutons. Il ne se passe rien.


Explications :

La méthode showInputDialog() de la classe JOptionPane (ligne 25) permet de faire apparaître une boite de saisie. Le texte que vous entrez permet de faire des choix. Ici, on n'a pas utilisé le texte saisi. En général, on met le texte dans une variable. Pour ce faire, on écrit : String saisie = JOptionPane.showInputDialog(f, "Ici, votre texte"); Selon la valeur de saisie, on choisi de faire telle ou autre chose. Si on saisie du texte dans le champ, même des caractères espace, et qu'on clique sur Ok la valeur de saisie sera le texte saisie.
So on ne saisit rien dans le champ, même pas des espaces, et qu'on clique sur Ok, la valeur sera une chaine vide. saisie = "";
Mais si on clique sur Cancel (ou annuler) ou la croix qui ferme la fenêtre, la valeur de saisie est null. null est abscence d'objet ou objet non référencé. Même si on n'avait déjà saisi du texte, saisie sera toujours égale à null.
Il existe une autre variante de la méthode showInputDialog() de la classe JOptionPane. Celle ci requiert 4 arguments.
Le premier étant toujours la fenêtre dans laquelle apparait la boite de saisie.
Le deuxième étant le message invitant l'utilisateur à entrer un texte dans le champ de saisie.
Le 3ème étant le titre de la boite de saisie.
Le 4ème est le type d'image apparaissant dans la boite.

4ème argument = -1 --> Pas d'image. Le type de message ici est quelconque
4ème argument = 0 --> Image d'un octagone dans lequel se trouve une croix rouge. Le type de message ici prévient l'utilisateur d'une erreur comise par lui ou par le système.
4ème argument = 1 --> Image d'un cercle dans lequel se trouve la lettre i. Le message de la boite est ici de type information.
4ème argument = 2 --> Image d'un triangle dans lequel se trouve un point d'exclamation. Le message ici avertit l'utilisateur de quelque chose qui risque de se produire si par exemple le texte saisi n'est pas normal
4ème argument = 3 --> Image d'un carré dans lequel se trouve un point d'interrogation. Le message de la boite est de type, question posée à l'utilisateur.

Si on saisit du texte dans le champ et qu'on clique sur Ok, la valeur de saisie est le texte saisi.
Si on clique sur ok sans saisir du texte dans le champ, la valeur du champ de saisie est toujours la chaine vide"" .
Si on clique sur le bouton annuler ou Cancel ou sur la croix qui ferme la fenêtre sans entrer son texte, la valeur saisie est null. Et ce, même si on n'avait déjà saisie du texte dans le champ.
 Exemple 7 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {
6.          public Fenetre(String titre)
7.          {
8.               setTitle(titre);
9.               setSize(500, 300);
10.              Container c = getContentPane();
11.              c.setLayout(new FlowLayout() );
12.              c.setBackground(new Color(208, 255, 208) );
13.              setLocationRelativeTo(this.getParent()); 
14.              setDefaultCloseOperation(3);
15.         }
16.    }
17.     
18.       
19.    public class TesterBoiteSaisie2
20.    {
21.         public static void main(String [] args)
22.         {
23.              JFrame f = new Fenetre("boites de saisie");
24.              f.setVisible(true);
25.              JOptionPane.showInputDialog(f, "Ici, votre texte", "titre", -1);
26.              System.out.println("saisie = " + saisie);
27.         }
28.    }
Compilez puis exécutez ce programme. Voyez ce que ça donne

Puis changez la valeur -1 (ligne 25) en 0. Puis en 1. Puis en 2. Et enfin en 3. A chque fois, recompilez puis exécutez. Notez les différences.

D.9.4 Les boites d' options

La boite d'option ressemble à la boite de saisie. Mais ici, vous ne saisissez rien. Vous avez déjà un ensemble de valeurs. Vous choisissez l'une d'elle, puis vous cliquez sur Ok ou sur Cancel (ou annuler en français) pour refusez tout choix. Cet ensemble de valeurs appartient en fait à une boite combo.
 Exemple 8 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {
6.          public Fenetre(String titre)
7.          {
8.               setTitle(titre);
9.               setSize(500, 300);
10.              Container c = getContentPane();
11.              c.setLayout(new FlowLayout() );
12.              c.setBackground(new Color(111, 222, 111) );
13.              setLocationRelativeTo(this.getParent()); 
14.              setDefaultCloseOperation(3);
15.         }
16.    }
17.     
18.       
19.    public class TesterBoiteOptions
20.    {
21.         public static void main(String [] args)
22.         {
23.              JFrame f = new Fenetre("boites de saisie");
24.              f.setVisible(true);
25.              
26.              String [] noms = {"DE GAULLE", "POMPIDOU", "GISCARD", "MITTERAND", "CHIRAC", "SARKOZY"};
27.              JOptionPane.showInputDialog(f, "Choisir un nom", "titre", 1, null, noms, noms[2]);
28.              
29.         }
30.    }
Compilez puis exécutez ce programme. Il sera affiché :

Une fenêtre graphique à l'intérieur de laquelle on trouve la boite d'options. Cette boites contient 2 boutons : OK et Annuler (ou Cancel). En plus de ça, on a un liste de noms dans une boite combo. Le nom préselectionné est en position 2. C'est GISCARD. Position 0 = DE GAULLE.
Cliquez sur Ok ou Annuler (ouCancel), il ne se passe rien.
Explications :

La méthode showInputDialog() de la classe JOptionPane permet d'afficher une boite d'options(ligne 27). Vous l'avez peut-être remarqué, cette méthode permettait déjà d'afficher la boite de saisie. Mais ici, les paramètres ne sont pas les mêmes. C'est donc une autre version de cette méthode. La fameuse surdéfinition de méthode permise en java.
Le premier argument est comme toujours, la fenêtre dans laquelle doit apparaitre la boite d'options.
Le deuxième argument est le message qui s'affiche dans la boite.
Le troisième est le titre de la boite.
Le quatrième est le type d'icone (image) qui doit s'afficher dans la boite.

Rappel :
JOptionPane.ERROR_MESSAGE = 0; un octagone orange dans lequel on voit une croix rouge.
JOptionPane.INFORMATION_MESSAGE = 1; Un cercle de couleur bleu très clair à l'intérieur duquel se trouve la lettre i.
JOptionPane.WARNING_MESSAGE = 2;Un triangle jaune à l'intérieur duquel se trouve un point d'exclamation.
JOptionPane.QUESTION_MESSAGE = 3; Un carré vert dans lequel se trouve un point d'interrogation.
JOptionPane.PLAIN_MESSAGE = -1; Aucune image n'est affichée.



Le cinquième est votre propre image que vous voulez voir s'afficher dans la boite. Pour l'instant, je ne vous ai pas encore appris à mettre votre propre image dans une fenêtre graphique. On le fait grâce à la classe prédéfinie Icon. Ici, j'ai mis null. Ce qui signifie ici, pas d'image.

Le 6ème argument est le tableau de noms de la boite combo. Ici, c'est le tableau déclaré en ligne 26.
Le 7ème et dernier argument est l'élément du tableau préalablement sélectionné. Ici, c'est le nom en position 2. Et c'est GISCARD

Ici, le clic sur Annuler (ou Cancel) ne produit rien. C'est logique.
Le clic sur le bouton OK ne produit rien non plus. C'est aussi normal. Puisqu'on n'a rien fait pour qu'il se produise quelque chose. En général, pour faire en sorte qu'il se passe quelque chose, on réccupère d'abord la valeur sélectionnée en écrivant ceci :
String selection = (String) JOptionPane.showInputDialog(f, "Choisir un nom", "titre", 1, null, noms, noms[2]);
La méthode showInputDialog() utilisée ici renvoie une variable de type Object qu'il faut convertir explicitement en String. D' où (String).
Connaissant donc cette valeur de type String, on peut prévoir une réaction dans une structure conditionnelle. Par exemple, if (selection == "GISCARD").
 Exemple 9 : 

1.    import javax.swing.*;
2.    import java.awt.*;
3.  
4.     class Fenetre extends JFrame
5.     {
6.          public Fenetre(String titre)
7.          {
8.               setTitle(titre);
9.               setSize(500, 300);
10.              Container c = getContentPane();
11.              c.setLayout(new FlowLayout() );
12.              c.setBackground(new Color(111, 222, 111) );
13.              setLocationRelativeTo(this.getParent()); 
14.              setDefaultCloseOperation(3);
15.         }
16.    }
17.     
18.       
19.    public class TesterBoiteOptions2
20.    {
21.         public static void main(String [] args)
22.         {
23.              JFrame f = new Fenetre("boites de saisie");
24.              f.setVisible(true);
25.              
26.              String [] noms = {"DE GAULLE", "POMPIDOU", "GISCARD", "MITTERAND", "CHIRAC", "SARKOZY"};
27.              JOptionPane.showOptionDialog(f, "Choisir un nom", "titre", 1, 1, null, noms, noms[2]);
28.              
29.         }
30.    }
Compilez puis exécutez ce programme. Il sera affiché :

Une fenêtre graphique à l'intérieur de laquelle on trouve la boite d'options. Cette boite contient une liste de bouton disposés sur une ligne. Chaque bouton possède un nom. C'est la liste des noms du tableau de String noms. Le bouton qui possède le focus est en position 2. C'est GISCARD. Position 0 = DE GAULLE.
Cliquez l'un des boutons, il ne se passe rien.
Explications :

La méthode showOptionDialog() de la classe JOptionPane fait la même chose que la méthode showInputDialog() utilisée en exemple précédent. A deux exceptions près. Ici, on a 8 arguments au lieu de 7. Et les boutons OK et Annuler (ou Cancel) n'existent plus.

Il existe en fait une autre différence. La méthode renvoie un entier et pas un objet comme dans l'exemple précédent. On écrit : int position = JOptionPane.showOptionDialog(f, "Choisir un nom", "titre", 1, 1, null, noms, noms[2]);
La variable position contient la position du bouton sur lequel vous cliquez. Si vous cliquez sur la croix de la boite, c'est à dire, le bouton de fermeture classique se toute fenêtre, position = -1.

Le premier argument est comme toujours, la fenêtre dans laquelle doit apparaitre la boite d'options.
Le deuxième argument est le message qui s'affiche dans la boite.
Le troisième est le titre de la boite.
Le quatrième est le type de boutons qui apparaîtront dans la boute. 2 cas sont possibles. Soit les 2 boutons Oui et Non (Ou Yes et No). Soit les 3 boutons : Oui et Non et Annuler (Ou alors, Yes et No et Cancel).
JOptionPane.YES_NO_OPTION = 0; et JOptionPane.YES_NO_CANCEL_OPTION = 1;
Le 5ème est le type d'image (icone) :

Rappel :
JOptionPane.ERROR_MESSAGE = 0; un octagone orange dans lequel on voit une croix rouge.
JOptionPane.INFORMATION_MESSAGE = 1; Un cercle de couleur bleu très clair à l'intérieur duquel se trouve la lettre i.
JOptionPane.WARNING_MESSAGE = 2;Un triangle jaune à l'intérieur duquel se trouve un point d'exclamation.
JOptionPane.QUESTION_MESSAGE = 3; Un carré vert dans lequel se trouve un point d'interrogation.
JOptionPane.PLAIN_MESSAGE = -1; Aucune image n'est affichée.



Le 6ème est votre propre image à mettre dans la boite. null signifie : pas d'image.
Le 7ème est le tableau de valeurs dont l'utilisateur doit faire le choix.
Le 8ème est la valeur qui possède déjà le focus au moment de l'apparition de la boite de dialogue.
La connaissance, c'est bien. La partager, c'est mieux
Conseiller ce site à un(e) ami(e):

Son e-mail est :       
Une suggestion à faire pour ce site ? ... Contact : webmaster@debutantprog.com
← (précédent) D.8 Evènements sur les boites combo
D.10 gestionnaires de mise en forme
Accueil S O M M A I R E

D.9 Evènements sur boites de dialogue