Java Fermeture de fenêtre WindowListener

Fermé
Utilisateur anonyme - 1 mars 2005 à 16:55
 Utilisateur anonyme - 23 mars 2009 à 01:36
Bonjour,

Je rencontre un problème concernant la fermeture de mon programme. J'utilise l'interface WindowListener et la méthode windowClosing. A l'interieur de celle-ci, je crée un JOptionPane pour demander à l'utilisateur s'il souhaite quitter ou non. Si oui, je fais un System.exit(0) sinon un setDefaultCloseOperation JFrame.DO_NOTHING_ON_CLOSE).
Le problème est que lorsque j'utilise la souris ou la barre d'espace pour actionner les boutons cela fonctionne normalement mais dès lors que j'utilise le touche Entrée la fenêtre est fermée et l'application terminée dans tous les cas. (On obtient toujours n = 0 cf source)
Si quelqu'un a déjà rencontré ce problème...
Je vous remercie d'avance pour vos réponses.

Ci-joint le source:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;


public class Fenetre extends JFrame{

Container panneau;

// Constructeur
public Fenetre()
{

panneau = getContentPane();

setSize(500,500);
setVisible(true);

// Fermeture de la fenêtre
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
String[] options = {"Oui","Non"};

JLabel lMessage = new JLabel("Etes-vous sûr de vouloir quitter ?");


// Création d'un JOptionPane Oui - Non
int n = JOptionPane.showOptionDialog(new JFrame(),
lMessage,
"Quitter la fenêtre?",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, // Pas d'icône utilisée
options, // Liste boutons
options[0]); // Bouton par défaut


// Si réponse Oui, on quitte.
if(n == 0)
{
System.out.println("n = " + n);
System.exit(0);
}

// Sinon.
else
{
System.out.println("n = " + n);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
}
});

}


public static void main(String arg[])
{
new Fenetre();
}
}
A voir également:

1 réponse

Utilisateur anonyme
23 mars 2009 à 01:36
Bonjour,

Compte tenu de la date de la question, si je repond, c'est pour ceux qui seraient intéressés:

Nous avons 2 boutons <Oui> et <Non> (dans cet ordre).

Tel qu'est écrit le programme, c'est le bouton <Oui> qui a le focus >>>> options[0]); // Bouton par défaut .

C'est donc ce bouton qui sera pris en compte si on utilise <Entrée>, comme si on cliquait sur lui.

Si on préfère que ce soit <Non> par défaut, modifions options[0]); // Bouton par défaut en options[1]); // Bouton par défaut .

Troisième possibilité, nous ne voulons pas de bouton par défaut, remplacons options[0]); // Bouton par défaut par null); // Pas de bouton par défaut .

Cordialement,

Dan
0