IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

ActionListener : confirmation de fermeture


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    HNT
    HNT est déconnecté
    Membre éclairé Avatar de HNT
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 448
    Par défaut ActionListener : confirmation de fermeture
    Bonjour,

    J'ai un JMenuItem qui est dans un JMenu, sur ce JMenuItem, il y a un actionListener. Lorsqu'on clique sur le JMenuItem une fenetre de confirmation doit s'ouvrir et demande la confirmation de fermeture. Cette fenetre de confirmation renvoye true ou false selon que l'utilisateur clique sur confirmer ou anuler, seulement ca ne marche qu'a moitié. L'appel à cette fenetre de confirmation se fait dans l'actionListener du JMenuItem donc quand on est dans la fenetre de confirmation l'actionListener ne s'execute plus vus que la souris n'est plus sur le JMenuItem. Par conséquent, pour sortir que programme, je doit réapuyer une seconde fois sur quitter, là la variable booléenne a déjà été initalisée et l'actionListener ferme le programme. Ma question est donc : comment éviter ceci ? le programme doit se fermer directement et le System.exit(0) ne peut pas etre dans la fenetre de confirmation vu qu'elle sert à d'autres choses que quitté le programme. Voici les morceaux de mon code correspondant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    		JMenuItem quit = new JMenuItem("Quitter");
    		quit.addActionListener(new ActionListener()
    				{
    					public void actionPerformed(ActionEvent event)
    					{
    						//Comment forcer l'attente de la réponse ? aussi non, deux clic nécessaire
    							if (InformationFrame.InformationFenetre("Etes-vous sur de vouloire quitter ?",currentLEtF))
    								System.exit(0);	
    					}
     
    				});
    		menuPrinc.add(quit);
    		return menuPrinc;
    //menuPrinc = 1 JMenu
    .
    .
    .
    //Dans la classe de la fenetre de confirmation
    		JButton j = new JButton("Confirmer");
    		j.setBorderPainted(false);	
    		j.setSize(40,15);
    		j.addActionListener(new ActionListener()
    				{
    					public void actionPerformed(ActionEvent event)
    					{
    						choix = true;
    						f.dispose();
                                                    //est-ce que le f.dispose peut poser problème  ?
    					}
    				}
    //puis un autre bouton "annuler" avec choix = false et à la fin on renvoie choix
    		);
    Désolé pour la densité de la question j'ai fait le plus court possible

  2. #2
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    La chose la plus simple est de passer par la classe JOptionPane.Voila une petit example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
     
    public class Code {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		final JFrame frame = new JFrame("Application");
    		frame.setSize(400, 300);
    		frame.getContentPane().setLayout(null);
    		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		JButton button= new JButton("Exit");
    		button.setSize(100, 25);
     
    		button.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent e) {
    				int option = JOptionPane.showConfirmDialog(frame.getContentPane(), "Etes-vous sure ?", "Quitter ?", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null);
    				if (option == JOptionPane.YES_OPTION) {
    					frame.dispose();
    				}
    			}
    		});
     
    		frame.getContentPane().add(button);
    		frame.setVisible(true);
    	}
    }
    Regarde aussi la doc pour cette classe
    J'espere que cela va t'aider

  3. #3
    Membre expérimenté Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Par défaut
    Une petite pecision. Si la fiche(frame) est la fiche principale , elle est le parent de tout les autre, il n'y a pas de difference entre les deux methodes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    					System.exit(0);
    ou
    					frame.dispose();
    Bien entendu si frame est un enfant d'une autre fiche seulement elle va etre detruite.
    En question de performance essaye plus tot d'utiliser la methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setVisible(true | false);
    que

    Comme ca tu va reutiliser la meme fiche au lieu de detruire l'ancienne, creer une nouvelle


  4. #4
    HNT
    HNT est déconnecté
    Membre éclairé Avatar de HNT
    Profil pro
    Étudiant
    Inscrit en
    Juin 2005
    Messages
    448
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2005
    Messages : 448
    Par défaut
    Merci beaucoup, ca marche impecablement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Confirmation de fermeture d'une fenêtre
    Par sepas dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 09/10/2007, 21h56
  2. Confirmation avant fermeture
    Par Bowen dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2007, 14h32
  3. Confirmer une fermeture de session d'une page Web en VBA?
    Par pegase33 dans le forum Général VBA
    Réponses: 2
    Dernier message: 05/09/2006, 14h42
  4. Message confirmation avant fermeture popup
    Par Ant8386 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 19/07/2006, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo