Utilisation de boîtes de message et de confirmation
Nous utilisons une boîte de message pour afficher chacun des carrés. Comme celle-ci n’est rattachée à aucune fenêtre, le premier argument de la méthode showMessageDialog est null. Les arguments suivants précisent respectivement le message à afficher (ici le nombre impair courant et son carré), le titre de la boîte (CARRES) et le type d’icône (information). Après chaque affichage d’un carré, nous demandons à l’utilisateur s’il souhaite continuer en utilisant une boîte de confirmation créée par la méthode showConfirmDialog. Là encore le premier argument est null. Les autres précisent respectivement la question à afficher (impair suivant ?), le titre de la boîte et la nature des boutons figurant dans la boîte (YES et NO). Notez que le choix du type d’icône ou celui de la nature des boutons est exprimé à l’aide de constantes prédéfinies de la classe JOptionPane, ce qui est plus pratique que d’utiliser les valeurs entières correspondantes. import javax.swing.* ; public class Carres { public static void main(String[] args) { int n = 1 ; int rep ; do { JOptionPane.showMessageDialog (null, n + » a pour carre » + n*n, « CARRES », JOptionPane.INFORMATION_MESSAGE) ; Écrire un programme qui affiche les carrés des nombres impairs à partir de 1. Après l’affichage de chaque carré, on demandera à l’utilisateur s’il souhaite continuer. On utilisera des boîtes de message et des boîtes de confirmation comme dans les illustrations de la page suivante : Ici, il n’est pas nécessaire de créer une fenêtre, de sorte que le programme sera réduit à une simple méthode main. Exercice 122 Utilisation de boîtes de message, de confirmation et de saisie n+=2 ; rep = JOptionPane.showConfirmDialog (null, « impair suivant ? », « CARRES », JOptionPane.YES_NO_OPTION) ; } while (rep == JOptionPane.YES_OPTION) ; } } Utilisation de boîtes de message, de confirmation et de saisie Nous utiliserons donc les boîtes de dialogue standard construites automatiquement par les méthodes showMessageDialog, showConfirmDialog et showInputDialog. Le premier argument de leur appel est toujours null puisque nous ne cherchons pas à rattacher ces boîtes à une fenêtre particulière. Le choix des formes d’icône ou du type des boutons est fait à l’aide des Écrire un programme qui lit des valeurs flottantes et en affiche la moyenne. Les valeurs seront lues par l’intermédiaire d’une boîte de saisie. Une réponse incorrecte fera l’objet d’un message d’avertissement (en cas d’action sur le bouton Cancel ou de fermeture de la boîte, on redemandera la valeur). Après chaque valeur correctement lue, on demandera à l’utilisateur s’il en a d’autres à fournir. A la fin, une boîte de message fournira le nombre de valeurs lues et leur moyenne. Ici, il n’est pas nécessaire de créer une fenêtre (le programme sera donc réduit à une simple méthode main). Voici quelques illustrations du dialogue avec l’utilisateur pour cet exemple : constantes prédéfinies de la classe JOptionPane : JOptionPane.QUESTION_MESSAGE pour l’icône « point d’interrogation », JOptionPane.YES_NO_OPTION pour ne disposer que des deux boutons YES et NO. En ce qui concerne la saisie des valeurs, nous convertissons la chaîne lue en un double avec la méthode Double.parseDouble. Nous traitons les valeurs incorrectes en interceptant l’exception NumberFormatException qu’elle génère. Rappelons que si l’utilisateur clique sur le bouton Cancel d’une boîte de saisie ou s’il la ferme, la méthode showInputDialog fournit la valeur null. import javax.swing.* ; public class Moyenne { public static void main(String[] args) { int n = 0 ; double x=0, somme=0, moyenne ; int continuer ; // lecture des differentes valeurs do { boolean ok ; n++ ; do // boucle de lecture d’une valeur jusqu’a correcte { ok = false ; String rep = (String)JOptionPane.showInputDialog (null, « donnez la valeur de rang » + n, « MOYENNES », JOptionPane.QUESTION_MESSAGE) ; if (rep == null) continue ; // si action sur Cancel ou fermeture try { x = Double.parseDouble(rep) ; ok = true ; } catch (NumberFormatException e) { JOptionPane.showMessageDialog (null, « reponse incorrecte ») ; } } while (!ok) ; somme += x ; continuer = JOptionPane.showConfirmDialog (null, « Avez-vous encore des valeurs ? « , « MOYENNES », JOptionPane.YES_NO_OPTION) ; } while (continuer == JOptionPane.YES_OPTION) ; // calcul de la moyenne et affichage moyenne = somme/n ; JOptionPane.showMessageDialog (null, « moyenne des » + n + » valeurs = » + moyenne, « RESULTATS », JOptionPane.INFORMATION_MESSAGE) ; } }
Programmation d’une boîte de message
Comme l’énoncé nous interdit d’utiliser les boîtes de dialogue standard, il est nécessaire de créer un objet boîte de dialogue d’une classe JDialog ou dérivée. Nous vous proposons deux solutions : l’une utilisant directement la classe JDialog, l’autre créant une classe spécialisée dérivée de JDialog. Première solution Dans la méthode afficheMessage, nous créons donc un objet de type JDialog, en fournissant true comme troisième argument, ce qui correspond au cas usuel d’une boîte « modale ». Nous y plaçons deux composants : un bouton OK et une étiquette (JLabel). Comme le gestionnaire par défaut d’une boîte de dialogue est de type BorderLayout, nous le remplaçons par un gestionnaire de type FlowLayout. L’affichage de la boîte est provoqué par l’appel de sa méthode setVisible avec l’argument true. La fin du dialogue doit être déclenchée par l’écouteur des événements Action associés au bouton OK. Ici, cet écouteur ne peut être qu’un objet d’une classe spécifique (nommée EcoutOK). Nous transmettons la référence de la boîte concernée au constructeur : la méthode actionPerformed se contente de lui appliquer la méthode setVisible (false) pour mettre fin au dialogue (aucun test n’a besoin d’être réalisé dans la méthode afficheMessage). Avant de quitter la méthode afficheMessage, nous prenons soin d’appeler la méthode dispose afin de libérer la boîte de dialogue et les différents objets qui lui sont associés.