2016-11-30 2 views
0

Le but de mon code est d'obtenir la saisie de l'utilisateur et lorsque l'utilisateur souhaite enregistrer les données, ils pressent l'option OK. Cependant, si l'utilisateur a entré des données et qu'il n'a plus envie de continuer, il suffit d'appuyer sur le bouton de sortie de la croix rouge dans le coin supérieur droit pour quitter sans sauvegarder.Comment puis-je détecter si un utilisateur ferme la fenêtre via la croix rouge?

Comment procéder?

Voici mon code:

JOptionPane.showMessageDialog(null, myPanel, "Edit Fruit", JOptionPane.INFORMATION_MESSAGE); 

... 

if (!(JOptionPane.OK_OPTION)) 
{ 
    //If the user exits the option pane via the red cross, exit the loop. 
    break; 
} 

EDIT: Ce code ne fonctionne pas comme je suis à la recherche que quand un JOptionPane.showMessageDialog est fermé par la croix et non un bouton OK rouge:

addWindowListener(new WindowAdapter() 
    { 
     @Override 
     public void windowClosing(WindowEvent e) 
     { 
      System.out.println("Closed"); 
      e.getWindow().dispose(); 
     } 
    }); 

Le code s'exécute même lorsque j'appuie sur l'option OK dans mon JOptionPane. Je veux seulement écouter la sortie via la croix rouge.

Merci pour votre aide.

+0

Que voulez-vous réaliser? Je ne vois pas de question. Vous voulez le détecter et ensuite? – FaithReaper

+0

La question est mon titre, mon programme n'est pas pertinent pour cette question. Mais je voudrais casser ma boucle for, comme mentionné dans mon extrait de code. – juiceb0xk

+0

Une recherche rapide dans Google avec «swing window close listener» me dirige à cette réponse: http://stackoverflow.com/questions/16295942/java-swing-adding-action-listener-for-exit-on-close – FaithReaper

Répondre

2

Tout d'abord, ce n'est pas une interface utilisateur très standard pour faire quelque chose que si l'utilisateur ferme une fenêtre par les x rouges - par opposition à la fermeture de la fenêtre en tapant Alt - F4 ou double cliquant sur l'icône, ou Alt - Espace - C, et ainsi de suite; donc je suppose que vous vouliez simplement fermer sans appuyer sur le bouton OK plutôt que par le x rouge spécifiquement.

Vous avez du code qui peut détecter lorsque la fenêtre est fermée.

Vous avez le code peut détecter lorsque l'utilisateur appuie sur le bouton OK.

Définissez un indicateur pour indiquer que le bouton OK a été enfoncé et, si l'indicateur n'est pas défini à la fermeture de la fenêtre, l'utilisateur a fermé la fenêtre sans appuyer sur le bouton OK.

+0

Génial, merci pour ton aide. – juiceb0xk

1

Une autre recherche rapide avec les mots-clés "JOptionPanel close listener" m'amène à une autre question.

How can I add a listener on the ok button of JOptionPane?

La réponse acceptée suggère de vérifier la valeur de retour de la méthode showOptionDialog.

Mais vous pouvez utiliser la méthode JOptionPane.showOptionDialog avec un seul DEFAULT_OPTION pour le bouton OK. Le showOptionDialog renverra 0 si OK a été cliqué et -1 si l'utilisateur a fermé la boîte de dialogue.

int res = JOptionPane.showOptionDialog(null, "Hello", "Test", 
JOptionPane.DEFAULT_OPTION, 
    JOptionPane.INFORMATION_MESSAGE, null, null, null); 

System.out.println(res); 

Vous n'avez pas besoin d'un auditeur parce que la javadoc dit:

Chaque méthode showXxxDialog bloque l'appelant jusqu'à ce que l'interaction de l'utilisateur est terminée.

Ici, il n'y a pas de différence entre étroite avec croix rea, avec des combinaisons de touches, etc., comme le suggère la première réponse. Mais, je suppose que vous n'avez peut-être pas besoin.

+0

Merci beaucoup pour votre aide. – juiceb0xk