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

Agents de placement/Fenêtres Java Discussion :

Les JDialogs et parents


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut Les JDialogs et parents
    Bonjour,
    Depuis quelques temps je découvre dans ma formation le langage de JAVA et je dois admettre que celui-ci est très puissant.
    Mais voila, depuis plusieurs heures, je seche sur le même problème: j'ai une simple frame avec un menu et une option Quitter dans ce menu.
    Lorsque je clique sur la touche Quitter, je fais appel à une méthode ConfirmExit() qui hérite de JDialog et affiche une boite de confirmation pour quitter. Et le problème se situe ici: je pense que la fenetre parent n'est pas correctement indiquée et de ce fait, que je clique sur OK ou Annuler, j'obtiens le même résultat: fermeture de la fenetre et retour sous la frame principale alors que je voudrais fermer la frame principale aussi.
    Mais pourtant, j'appel une seconde fois cette méthode lorsque je clique sur la croix et la tout marche correctement.

    Voici mon code pour plus de clarté:
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    // importation des classes du package
    // Abstract Windowing Toolkit
    import java.awt.*;
    // importation des classes du projet Swing
    import javax.swing.*;
    // importation des classes event
    import java.awt.event.*;
     
     
    public class myFrame extends JFrame implements WindowListener,ActionListener {
    	// Define global component
    	JMenuItem quitter = null;
     
    	// Define constructor
    	myFrame(){
    		// Set initial parameters
    		setSize(300,300);
    		setTitle("My first frame =)");
    		setLocationRelativeTo(null);		
     
     
    		// Define item menu for Fichier Menu
    		JMenuItem quitter = new JMenuItem("Quitter");
    		quitter.addActionListener(this);
     
    		JMenu fichier = new JMenu("Fichier");
    		fichier.add(quitter);
     
     
    		// Define item menu for Apparence Menu
    		JMenuItem change = new JMenuItem("Changer");
    		change.addActionListener(this);
     
    		JMenu apparence = new JMenu("Apparence");
    		apparence.add(change);
     
     
    		// Define the menu Bar
    		JMenuBar mBar = new JMenuBar();
    		mBar.add(apparence);
    		mBar.add(fichier);
    		setJMenuBar(mBar);
     
     
    		// Add windowListener
    		addWindowListener(this);
     
    		// Display the frame
    		setVisible(true);
    	}
     
     
    	public static void main(String Argv[]){
    		myFrame exo1 = new myFrame();
    	}
     
     
     
    	// Redefine methods from ActionListener
    	public void actionPerformed(ActionEvent ae){
    		if (ae.getActionCommand() == "Quitter") {
    			ConfirmExit();	
    		}
    		else if (ae.getActionCommand() == "Changer") {
    			ChooseFigure figure = new ChooseFigure(this,"Modifier la figure",true,200,100);
    		}
    	}
     
     
     
     
     
    	// Redefine methods from WindowListener
    	public void windowActivated(WindowEvent we){
    	}
    	public void windowClosed(WindowEvent we){
    	}	
    	public void windowClosing(WindowEvent we){
    		ConfirmExit();			
    	}	
    	public void windowDeactivated(WindowEvent we){
    	}	
    	public void windowDeiconified(WindowEvent we){
    	}
    	public void windowIconified(WindowEvent we){
    	}
    	public void windowOpened(WindowEvent we){
    	}	
     
     
    	public void ConfirmExit() {
    		int choix;
    		choix = JOptionPane.showConfirmDialog(this,"Etes-vous sûr de vouloir quitter ?","Attention !",JOptionPane.OK_CANCEL_OPTION,JOptionPane.QUESTION_MESSAGE);
    		setVisible(true);
    		// Get the value selected by the user
    		if ( choix == JOptionPane.OK_OPTION)
    			setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		else
    			setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    	}
     
     
     
    	// Define a class which display a Jdialog to choose Menu
    	public class ChooseFigure extends JDialog implements ItemListener {
    		JComboBox fig = null;		
    		String choixFigure = null;
     
     
    		// Define constructor
    		ChooseFigure(JFrame owner, String titre, boolean affichage, int largueur, int hauteur) {
    			// Initialise JDialog
    			super(owner,titre,affichage);
    			setSize(largueur,hauteur);
    			setLocationRelativeTo(null);
    			setLayout(new FlowLayout());
     
    			// Define component
    			JLabel lblChoix = new JLabel("Choisissez votre figure:",JLabel.CENTER);
    			add(lblChoix);
     
     
    			String[] liste = {"", "Triangle", "Croix", "Rond", "Carré"};
    			JComboBox fig = new JComboBox(liste);
    			fig.addItemListener(this);		
     
    			add(fig);	
    			setVisible(true);			
    		}		
     
     
    		// Redefine methods from ActionListener
    		public void itemStateChanged(ItemEvent ie){
     
    				// Test selected figure and close the Dialog
    				if (fig.getSelectedIndex() == 1) {
    					choixFigure = "Triangle";
    				//	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				}
    				else if (fig.getSelectedIndex() == 2) {
    					choixFigure ="Croix";
    				//	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				}
    				else if (fig.getSelectedIndex() == 3) {
    					choixFigure ="Rond";
    				//	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				}
    				else {
    					choixFigure ="Carré";
    				//	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				}						
    		}
     
     
    		// Method which permit to get the selected Figure
    		public String getSelectedFigure(){
    			return choixFigure;
    		}
     
    	}
     
    }
    Ps: Ne faites pas attention à la classe ChooseFigure, sur celle-ci aussi j'obtiens une erreur mais chaque chose dans son temps


    Merci d'avance pour votre réponse et bonne soirée

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 11
    Par défaut
    Salut,

    En fait dans ton code rien n'indique que ta fenetre doit etre detruite/masquée.

    Dans le cas de la fermeture par le menu, ta methode ConfirmExit() ne fait rien d'autre que de changer le comportement de ta fenetre sans demander sa destruction.

    Il te faut simplement remplacer ton setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    par this.dispose(); pour detruire ta fenetre (et dans ton cas quitter l'application) ou bien carement par System.exit(0);

    Dans le cas ou tu quittes par le bouton de fermeture de ta fentre principale, cela marchait bien car apres ta methode de confirmation une methode d'evenement de ta fenetre (heritee de JFrame) terminait par un System.exit(0) car tu avais prealablement demandé un comportement EXIT_ON_CLOSE

    Tu etais vraiment pas loin

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2006
    Messages : 29
    Par défaut
    Salut,

    Dans ta methode qui appel la boite de dialogue, il faut que tu remplace les setdefaultcloseopération.
    En effet, cela dit juste ce que java doit faire en cas de fermeture de la fenetre (Exit = ferme toute l'application et dispose juste la fenetre, tandis que nothing, rien)
    Du coup remplace le setdefaultcloseoperation par un appel tout simple à :
    this.dispose(); ce qui provoquera la fermeture de la fenetre

    A+

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut
    Merci de vos réponses, en effet je n'étais pas loin . Le pire est que je pensais à utiliser la méthode dispose mais.. je viens de me rendre compte que je ne l'utilisait pas avec this :-/.
    Lol maintenant il ne me reste plus qu'a chercher l'érreur (surement simple mais je cherche toujours compliqué) que j'ai avec la classe Canvas.
    Mais pour le moment, au lit la nuit porte conseil

    Merci à vous et bonne soirée

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/04/2011, 10h24
  2. Problème ou Bug de swing avec les JDialogs ?
    Par Wydicule dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/11/2010, 16h08
  3. Déduire les liens de parenté
    Par Ggamer dans le forum Prolog
    Réponses: 12
    Dernier message: 25/03/2010, 20h39
  4. Action sur les composants même parent
    Par BuzzLeclaire dans le forum Débuter
    Réponses: 8
    Dernier message: 28/02/2010, 22h13
  5. PB: pom projet n'hérite pas les profis du parent
    Par infoMed dans le forum Maven
    Réponses: 12
    Dernier message: 07/05/2008, 12h06

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