Utilisation d'une fenêtre de dialogue pour saisir différents renseignements récupérés par le programme.

     

alt : l'applet n'est pas visible par votre navigateur ; pour voir l'application, vous devez télécharger le code, le compiler et l'exécuter
Appuyer sur le bouton de cette applet.

Vous pourrez saisir des renseignements qui viendront donner des valeurs à certaines variables situées au niveau de l'ouverture de la boîte de dialogue.

Tant que la fenêtre avec la question n'est pas fermée, l'application est bloquée : la fenêtre de dialogue est modale.

On utilise ici la méthode JOptionPane.showInputDialog(...).

import java.awt.FlowLayout;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.Box;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Dialogue6 extends JDialog implements ActionListener {
    Jeu jeu;
    JButton valider = new JButton("Valider");
    JButton annuler = new JButton("Annuler");
    JTextField champNom = new JTextField(10);
    JCheckBox choixAide = new JCheckBox("choix de l'aide");
    public Dialogue6(Jeu jeu) {
	this.jeu = jeu;
	JPanel panneau ;
	
	Box boite = Box.createVerticalBox();
	setModal(true);
	setTitle("Choix");
	
	panneau = new JPanel();
	panneau.add(new JLabel("nom du joueur : "));
	panneau.add(champNom);
	boite.add(panneau);
	
	panneau = new JPanel();
	panneau.add(choixAide);
	boite.add(panneau);
	
	panneau = new JPanel();
	panneau.add(valider);
	panneau.add(annuler);
	boite.add(panneau);
	
	add(boite) ;
	
	valider.addActionListener(this);
	annuler.addActionListener(this);
	pack();
	setLocation(400, 200);
	setVisible(true);
    }
    
    public void actionPerformed(ActionEvent evt) {
	Object source = evt.getSource();
	if (source == valider) {
	    jeu.nom = champNom.getText();
	    jeu.aide = choixAide.isSelected();
	    dispose();
	}
	else if (source == annuler) {		
	    dispose();
	}
    }
}

class Jeu extends JFrame implements ActionListener {
    String nom;
    boolean aide;
    JTextArea texte = new JTextArea(2, 20);
    Jeu(String titre) {
	super(titre);
	JButton choix = new JButton("choix");
	
	setLayout(new FlowLayout());
	texte.setEditable(false);
	add(choix);
	add(texte);
	choix.addActionListener(this);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
	setLocation(100, 200);
	setVisible(true);
	pack();
    }
    
    public void actionPerformed(ActionEvent evt) {
	Dialogue6 dialogue = new Dialogue6(this);
	if (nom != null) {
             texte.setText("le nom est " + nom);
	     if (aide) texte.append("\n" + nom + " joue avec l'aide");
	}
	else texte.append("\n" + nom + " joue sans l'aide");
    }
}

class EssaiDialogue6 {
    public static void main(String[] arg) {
	new Jeu("Jeu");
    }
}

Vous pouvez voir :

  • le code de l'application décrite ici.
  • le code de l'applet.
    JDialog : la classe JDialog modélise une fenêtre qui peut être modale ou non. On rappelle que si une fenêtre est modale, tant qu'elle est ouverte, l'application est bloquée.
    setModal(true); : on demande à ce que la fenêtre de dialogue soit modale.
    Box boite = Box.createVerticalBox(); : on crée un JPanel muni d'un gestionnaire de répartition de type BoxLayout vertical, qui servira à ajouter les sous-composants les uns en-dessous des autres.
    dispose(); : cette instruction a pour conséquence la fermeture de la fenêtre de dialogue.
    texte.append("\n" + nom + " joue avec l'aide"); : on ajoute la chaîne de caractères indiquée à la fin de la chaîne se trouvant déjà dans texte.

    © Irène Charon, Télécom-ParisTech 2010