Utilisation d'un showOptionDialog



Utilisation d'un showOptionDialog :

Une fenêtre showOptionDialog est une forme de fenêtre avec des boutons personnalisés. On l'utilise souvent pour faire des menus. Le contenu des boutons provient d'un tableau de chaînes de caractères (String). La méthode showOptionDialog retourne l'indice du bouton sur lequel l'utilisateur a cliqué, le premier bouton portant l'indice 0.

Format général :

JOptionPane.showOptionDialog(null,

message, // texte à afficher

titre, // titre de la fenêtre

0,

type d'icône, // JOptionPane.PLAIN_MESSAGE ou autre...

null,

nomDuTableau, // tableau de String pour texte des boutons

nomDuTableau[n]) // où n est l'indice du bouton présélectionné

- celui qui sera choisi si on fait  Entrée 

|static int |showOptionDialog(Component parentComponent, Object message, String title, int optionType, int messageType, Icon icon, |

| |Object[] options, Object initialValue) |

|ERROR_MESSAGE |DEFAULT_OPTION |

|INFORMATION_MESSAGE |YES_NO_OPTION |

|WARNING_MESSAGE |YES_NO_CANCEL_OPTION |

|QUESTION_MESSAGE |OK_CANCEL_OPTION |

|PLAIN_MESSAGE | |

Exemple 1 :

[pic]

public static void main(String[] args) {

String menu[] = {"Jeu de dés", "Devinette d'un nombre",

"Jeu du pendu", "Terminer"};

int choix;

do

{

choix = JOptionPane.showOptionDialog(null,

"Faites votre choix :", "MENU DES JEUX",

0, JOptionPane.QUESTION_MESSAGE, null,

menu, menu[2]);

switch (choix)

{

case 0: jouerAuxDés();

break;

case 1: devinerNombre();

break;

case 2: jouerAuPendu();

break;

}

} while (choix != 3);

System.exit(0);

} // fin de la méthode main

Exemple 2 :

JOptionPane.showOptionDialog(null,

"Veuillez sélectionner une des options suivantes:",

"MENU PRINCIPAL",

0,

JOptionPane.PLAIN_MESSAGE,

null,

options,

options[0])

/*

* TestShowOptionDialog.java

* Ce programme démontre l'utilisation du showOptionDialog

* pour faire un menu

*/

import javax.swing.*;

public class TestShowOptionDialog

{

public static void main(String[] args)

{

final int PREMIER = 0,

DEUXIÈME = 1,

TROISIÈME = 2,

QUITTER = 3;

int choixMenu;

String options[] = {"Premier choix", "Deuxième choix",

"Troisième choix", "Quitter"};

do

{

choixMenu = JOptionPane.showOptionDialog(null,

"Veuillez sélectionner une des options suivantes:",

"MENU PRINCIPAL", 0, JOptionPane.PLAIN_MESSAGE,

null, options, options[0]);

switch(choixMenu)

{

case PREMIER:

JOptionPane.showMessageDialog(null,

"Vous avez sélectionné le premier choix");

break;

case DEUXIÈME:

JOptionPane.showMessageDialog(null,

"Vous avez sélectionné le deuxième choix");

break;

case TROISIÈME:

JOptionPane.showMessageDialog(null,

"Vous avez sélectionné le troisième choix");

}

} while (choixMenu != QUITTER);

System.exit(0);

}

}

Autres boites de dialogue :

import javax.swing.*;

public class Dialogue {

public static void main(String[] args) {

JTextField utilisateur = new JTextField();

JPasswordField passe = new JPasswordField();

JOptionPane.showOptionDialog(null,

new Object[] {"Votre nom :", utilisateur, "Mot de passe :", passe},

"Connexion",

JOptionPane.OK_CANCEL_OPTION,

JOptionPane.QUESTION_MESSAGE, null, null, null);

}

}

[pic]

Object[] : Tous les objets du tableau sont affichés les uns au-dessus des autres.

import java.awt.*;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.*;

public class Dialogue {

public static void main(String[] args) {

SimpleDateFormat heure = new SimpleDateFormat("HH 'h' mm 'mn'");

JLabel message = new JLabel(heure.format(new Date()), new ImageIcon("montre.png"), JLabel.RIGHT);

message.setFont(new Font("Arial", Font.BOLD+Font.ITALIC, 24));

message.setForeground(Color.RED);

message.setHorizontalTextPosition(JLabel.LEFT);

JOptionPane.showMessageDialog(null, message, "Heure actuelle", RMATION_MESSAGE);

}

}

[pic]

import java.text.*;

import java.util.Date;

import javax.swing.*;

public class Dialogue {

public static void main(String[] args) {

DateFormat date = DateFormat.getDateInstance(DateFormat.FULL);

SimpleDateFormat heure = new SimpleDateFormat("HH 'h' mm 'mn'");

String[] sélections = {"Date", "Heure", "Date et heure"};

String choix = (String)JOptionPane.showInputDialog(null,

"Faites votre choix ?",

"Date et heure",

JOptionPane.QUESTION_MESSAGE,

null,

sélections,

null);

if (choix.equals("Date")) {

String message = date.format(new Date());

JOptionPane.showMessageDialog(null, message, choix, RMATION_MESSAGE);

}

else if (choix.equals("Heure")) {

String message = heure.format(new Date());

JOptionPane.showMessageDialog(null, message, choix, RMATION_MESSAGE);

}

else {

String[] message = {date.format(new Date()), heure.format(new Date())};

JOptionPane.showMessageDialog(null, message, choix, RMATION_MESSAGE);

}

}

}

[pic] [pic]

import javax.swing.*;

public class Dialogue {

public static void main(String[] args) {

JTextField utilisateur = new JTextField();

JPasswordField motDePasse = new JPasswordField();

int choix = JOptionPane.showOptionDialog(null,

new Object[] {"Votre nom :", utilisateur, "Mot de passe :", motDePasse},

"Connexion",

JOptionPane.NO_OPTION,

JOptionPane.QUESTION_MESSAGE, null,

new String[] {"Mode privé", "Anonyme", "Annuler"}, null);

switch (choix) {

case 0 : if (utilisateur.getText().equalsIgnoreCase("Antonio") && motDePasse.getText().equals("toto"));

JOptionPane.showMessageDialog(null, "Vous êtes connecté en mode privé");

else

JOptionPane.showMessageDialog(null,

new String[] {"Utilisateur inconnu", "ou mot de passe incorrecte"},

"Connexion en mode privée refusée",

JOptionPane.ERROR_MESSAGE);

break;

case 1 : JOptionPane.showMessageDialog(null, "Vous êtes connecté en mode tout public"); break;

default : JOptionPane.showMessageDialog(null, "Non connecté...", "ATTENTION", JOptionPane.ERROR_MESSAGE); break;

}

}

}

[pic] [pic]

I- La lecture à la console

Les programmes qui affichent des résultats à la console lisent généralement les données à la console.

Exemple :

/*

* Lecture.java (MODE CONSOLE)

* Ce programme fait la lecture à la console du nom et de l'âge de l'usager

* pour ensuite afficher ces informations

* Date : août 2006

*/

import java.io.*;

public class Lecture {

public static void main (String args[]) throws IOException {

int age;

String nom;

String saisie;

BufferedReader clavier = new BufferedReader(

new InputStreamReader(System.in));

// lecture des données

System.out.print("\nVotre nom : ");

nom = clavier.readLine();

System.out.print("\nVotre âge : ");

saisie = clavier.readLine();

age = Integer.parseInt(saisie);

// affichage des résultats

System.out.println("\nBonjour " + nom +

", vous êtes donc âgé(e) de " + age + " ans.");

System.out.println("Puissiez-vous vivre encore longtemps!");

}

}

Résultats obtenus sur la console  :

[pic]

II- Les boîtes de dialogue

Exemple 1 (boîtes de dialogue avec le moins d'arguments possible) :

/*

* Lecture1.java (version graphique de Lecture.java)

* Ce programme fait la lecture du nom et de l'âge de l'usager

* pour ensuite afficher ces informations

* Date : août 2006

*/

import javax.swing.*;

public class Lecture1 {

public static void main (String args[]) {

int age;

String nom;

String saisie;

String phrase;

// lecture des données

nom = JOptionPane.showInputDialog("Votre nom : ");

saisie = JOptionPane.showInputDialog("Votre âge : ");

age = Integer.parseInt(saisie);

// affichage des résultats

phrase = "Bonjour " + nom + ", vous êtes donc âgé(e) de "

+ age + " ans.\nPuissiez-vous vivre encore longtemps!";

JOptionPane.showMessageDialog(null, phrase);

// fin de l'exécution

System.exit(0);

}

}

[pic] [pic]

[pic]

Exemple 2 (boîtes de dialogue personnalisées) :

/*

* Lecture2.java

* Ce programme fait la lecture du nom et de l'âge de l'usager

* pour ensuite afficher ces informations

* Date : août 2006

*/

import javax.swing.*;

public class Lecture2 {

public static void main (String args[]) {

int age;

String nom,

chaine,

phrase;

// lecture des données

nom = JOptionPane.showInputDialog(null, "Votre nom : ",

"Écran de saisie du nom", JOptionPane.PLAIN_MESSAGE);

chaine = JOptionPane.showInputDialog(null, "Votre âge : ",

"Écran de saisie de l'âge", JOptionPane.PLAIN_MESSAGE);

age = Integer.parseInt(chaine);

// affichage des résultats

phrase = "Bonjour " + nom + ", vous êtes donc âgé(e) de "

+ age + " ans.\nPuissiez-vous vivre encore longtemps!";

JOptionPane.showMessageDialog(null, phrase, "Écran de sortie",

JOptionPane.PLAIN_MESSAGE);

// fin de l'exécution

System.exit(0);

}

}

[pic] [pic]

|Options possibles pour le type d'icône à afficher : |

|JOptionPane.PLAIN_MESSAGE |pas d'icône du tout |

|JOptionPane.ERROR_MESSAGE |icône d'erreur |

|RMATION_MESSAGE |icône d'information |

| |(par défaut avec showMessageDialog) |

|JOptionPane.WARNING_MESSAGE |icône d'avertissement |

|JOptionPane.QUESTION_MESSAGE |icône de question |

| |(par défaut avec showInputDialog) |

III- Les formats d'affichage

Les données numériques peuvent être affichées avec un format qui contrôle le nombre de décimales, le nombre de chiffres minimum à afficher devant le point décimal, etc.

Exemple 1 (sans format d'affichage) :

/*

* Facture.java

* Ce programme lit des informations sur l'achat d'un article,

* il calcule et affiche le coût total de l'achat avec les taxes

* Date : août 2006

*/

import javax.swing.*;

public class Facture {

public static void main (String args[]) {

final double TAUX_TPS = 0.06;

final double TAUX_TVQ = 0.075;

int qte;

double prixUn;

double total;

String saisie;

// lecture des données

qte = Integer.parseInt(JOptionPane.showInputDialog("Quantité :"));

saisie = JOptionPane.showInputDialog("Prix unitaire :");

prixUn = Double.parseDouble(saisie);

// calcul et affichage des résultats

total = qte * prixUn * (1 + TAUX_TPS) * (1 + TAUX_TVQ);

JOptionPane.showMessageDialog(null, "Le coût total est de " + total,

"Écran de résultats", JOptionPane.PLAIN_MESSAGE);

// fin de l'exécution

System.exit(0);

}

}

Exemple 2 (avec format d'affichage) :

/*

* Facture1.java

* Version avec contrôle du format d'affichage pour le résultat

* Ce programme lit des informations sur l'achat d'un article,

* il calcule et affiche le coût total de l'achat avec les taxes

* Date : août 2006

*/

import javax.swing.*;

import java.text.*;

public class Facture1 {

public static void main (String args[]) {

DecimalFormat monnaie = new DecimalFormat("0.00 $");

final double TAUX_TPS = 0.06;

final double TAUX_TVQ = 0.075;

int qte;

double prixUn;

double total;

String saisie;

// lecture des données

qte = Integer.parseInt(JOptionPane.showInputDialog("Quantité :"));

saisie = JOptionPane.showInputDialog("Prix unitaire :");

prixUn = Double.parseDouble(saisie);

// calcul et affichage des résultats

total = qte * prixUn * (1 + TAUX_TPS) * (1 + TAUX_TVQ);

JOptionPane.showMessageDialog(null, "Le coût total est de " +

monnaie.format(total), "Écran de résultats",

JOptionPane.PLAIN_MESSAGE);

// fin de l'exécution

System.exit(0);

}

}

Exemples de formats :

|format |si la valeur formatée vaut |

| |0 |23148.567 |-12.304 |0.1 |

|"0.00" |0.00 |23148.57 |-12.30 |0.10 |

|"0.00;(0.00)" |0.00 |23148.57 |(12.30) |0.10 |

|"#,#00.0#" |00.0 |23 148.57 |-12.30 |00.1 |

|"#,##0.00 $" |0.00 $ |23 148.57 $ |-12.30 $ |0.10 $ |

|"0.00%" |0.00% |2314856.64% |-1230.40% |10.00% |

IV- Les boîtes de dialogue de confirmation

Exemples :

|paramètres à fournir |exemple |

|1. null |reponse = JOptionPane.showConfirmDialog(null, |

|2. String texte à afficher |"Voulez-vous effectuer une autre opération ?"); |

| | |

| |[pic] |

|1. null |reponse = JOptionPane.showConfirmDialog(null, |

|2. String texte à afficher |"Voulez-vous effectuer une autre opération ?", |

|3. String titre de la fenêtre |"", |

|4. int boutons désirés |JOptionPane.YES_NO_OPTION); |

| | |

|valeurs possibles pour boutons désirés : |[pic] |

|DEFAULT_OPTION | |

|YES_NO_OPTION | |

|YES_NO_CANCEL_OPTION | |

|OK_CANCEL_OPTION | |

|1. null |reponse = JOptionPane.showConfirmDialog(null, |

|2. String texte à afficher |"Cliquez sur OK pour effectuer une autre opération", "Titre de la fenêtre", |

|3. String titre de la fenêtre |JOptionPane.OK_CANCEL_OPTION, |

|4. int boutons désirés |JOptionPane.PLAIN_MESSAGE); |

|5. int type d'icône | |

| |[pic] |

|valeurs possibles pour type d'icône : | |

|ERROR_MESSAGE | |

|INFORMATION_MESSAGE | |

|WARNING_MESSAGE | |

|QUESTION_MESSAGE | |

|PLAIN_MESSAGE | |

Cette méthode retourne un entier (int) dont la valeur dépend du bouton choisi. Les valeurs possibles dépendent des boutons affichés et sont :

JOptionPane.YES_OPTION

JOptionPane.NO_OPTION

JOptionPane.CANCEL_OPTION

JOptionPane.OK_OPTION

JOptionPane.CLOSED_OPTION (si on a fermé la fenêtre avec le X)

Exemple 1 (avec showInputDialog) :

/*

* Confirmation1.java

* Ce programme demande à l'usager s'il désire continuer

* puis affiche le choix demandé

* Date : août 2006

*/

import javax.swing.*;

public class Confirmation1 {

public static void main (String args[]) {

char choix;

String message = "Vous avez choisi ";

choix = JOptionPane.showInputDialog(

"Voulez-vous continuer (O ou N) ?").charAt(0);

switch (choix)

{

case 'O': case 'o':

message += "OUI";

break;

case 'N': case 'n':

message += "NON";

break;

default:

message += "une mauvaise valeur";

}

JOptionPane.showMessageDialog(null, message, "RÉSULTATS",

RMATION_MESSAGE);

// fin de l'exécution

System.exit(0);

}

}

[pic] [pic]

Exemple 2 (avec showConfirmDialog) :

/*

* Confirmation2.java

* Ce programme demande à l'usager s'il désire continuer

* à l'aide de showConfirmDialog

* puis affiche le choix demandé

* Date : août 2006

*/

import javax.swing.*;

public class Confirmation2 {

public static void main (String args[]) {

int choix;

String message = "Vous avez choisi ";

choix = JOptionPane.showConfirmDialog(null,

"Voulez-vous continuer ?",

"Fenêtre de confirmation",

JOptionPane.YES_NO_OPTION);

switch (choix)

{

case JOptionPane.YES_OPTION:

message += "OUI";

break;

case JOptionPane.NO_OPTION:

message += "NON";

break;

default:

message += "de fermer la fenêtre";

}

JOptionPane.showMessageDialog(null, message, "RÉSULTATS",

RMATION_MESSAGE);

// fin de l'exécution

System.exit(0);

}

}

[pic] [pic]

V- Les zones de texte JTextArea

Exemple 1 (utiliser un JTextArea dans une boîte de dialogue) :

/*

* Exemple1JTextArea.java

* Exemple d'utilisation d'un JTextArea pour afficher

* des résultats en colonnes

* méthode setText pour assigner un String au contenu du JTextArea

*/

import javax.swing.*;

public class Exemple1JTextArea

{

public static void main(String[] args)

{

JTextArea sortie = new JTextArea(10, 30);

String texte;

int valeur1;

double valeur2;

texte = "nombre\tdouble\tquart\n";

for (int nombre = 1; nombre < 7; nombre++)

{

valeur1 = nombre * 2;

valeur2 = nombre / 4.0;

texte += "\n" + nombre + "\t" + valeur1 + "\t" + valeur2;

}

sortie.setText(texte);

JOptionPane.showMessageDialog(null, sortie,

"liste des nombres", JOptionPane.PLAIN_MESSAGE);

System.exit(0);

}

}

Si on avait mis texte directement au lieu de sortie dans le showMessageDialog :

Exemple 2 (éviter l'utilisation d'une variable String pour le contenu d'un JTextArea) :

/*

* Exemple2JTextArea.java

* Exemple d'utilisation d'un JTextArea pour afficher

* des résultats en colonnes

* méthode append pour ajouter à la fin du JTextArea

*/

import javax.swing.*;

public class Exemple2JTextArea

{

public static void main(String[] args)

{

JTextArea sortie = new JTextArea(10, 30);

int valeur1;

double valeur2;

sortie.append("nombre\tdouble\tquart\n");

for (int nombre = 1; nombre < 7; nombre++)

{

valeur1 = nombre * 2;

valeur2 = nombre / 4.0;

sortie.append("\n" + nombre + "\t" + valeur1 + "\t" + valeur2);

}

JOptionPane.showMessageDialog(null, sortie,

"liste des nombres", JOptionPane.PLAIN_MESSAGE);

System.exit(0);

}

}

Exemple 3 (modifier la police de caractères d'un JTextArea) :

/*

* Exemple3JTextArea.java

* Exemple d'utilisation d'un JTextArea pour afficher

* des résultats en colonnes

* méthode setText pour assigner un String au contenu du JTextArea

* méthode setFont pour changer la police de caractères du JTextArea

*/

import javax.swing.*;

import java.awt.Font;

public class Exemple3JTextArea

{

public static void main(String[] args)

{

JTextArea sortie = new JTextArea(10, 30);

String texte;

texte = "nombre\tdouble\tquart\n";

for (int nombre = 1; nombre < 7; nombre++)

{

texte += "\n" + nombre + "\t" + (nombre * 2) +

"\t" + (nombre / 4.0);

}

sortie.setFont(new Font("Courier", Font.PLAIN, 12));

sortie.setText(texte);

JOptionPane.showMessageDialog(null, sortie,

"liste des nombres en Courier 12", JOptionPane.PLAIN_MESSAGE);

sortie.setFont(new Font("Comic Sans MS", Font.BOLD + Font.ITALIC, 14));

JOptionPane.showMessageDialog(null, sortie,

"liste des nombres en Comic Sans MS 14", JOptionPane.PLAIN_MESSAGE);

System.exit(0);

}

}

|Valeurs possibles pour le nom de la police : |

|toute police acceptée par le système + |

|Serif |

|Monospaced |

|SansSerif |

|Valeurs possibles pour les attributs de la police : |

|Font.PLAIN |

|Font.BOLD |

|Font.ITALIC |

|Font.BOLD + Font.ITALIC |

[pic] [pic]

Autres méthodes pour personnaliser un JTextArea :

|exemples |

|// pour empêcher l'usager de modifier le texte d'un JTextArea |

|zoneTexte.setEditable(false); |

|// pour rendre un JTextArea transparent |

|zoneTexte.setOpaque(false); |

|// pour modifier la couleur de fond d'un JTextArea |

|zoneTexte.setBackground(Color.blue); |

|// pour modifier la couleur du texte d'un JTextArea |

|zoneTexte.setForeground(Color.white); |

|// pour modifier la police de caractères d'un JTextArea |

|zoneTexte.setFont(new Font("Courier", Font.BOLD, 14)); |

|// pour modifier la valeur d'un \t dans un JTextArea |

|zoneTexte.setTabSize(15); (la valeur par défaut est 8) |

-----------------------

Pour importer la librairie qui contient les classes nécessaires à la lecture

Déclaration d’un tampon de lecture associé à la console

Lire la ligne de type String et la placer dans la variable nom

Extraire l’entier de la ligne lue de type String et le placer dans la variable age

Données entrées :

Quantité : 10

Prix unitaire : 12.50

package nécessaire pour l'utilisation de la classe DecimalFormat

package nécessaire à toutes les classes commençant par J

(J indique swing)

demander 10 lignes de

30 colonnes (ou plus au besoin)

+= pour concaténer au texte

(ajouter à la fin du texte)

mettre le texte dans le JTextArea

le contenu de départ est vide

ajouter à la fin du contenu du JTextArea

package nécessaire à la classe Font

changer la police du contenu du JTextArea pour Courier 12pt

voir page suivante pour comparer les deux écrans obtenus

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download