JDialog évenement

Signaler
Messages postés
10
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
18 avril 2005
-
Messages postés
123
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
26 août 2012
-
Bonjour,
J'ai une classe principal jframe qui lorsque j'appuie sur un boutton ouvre
une jdialog.
Ensuite je n'arrive pas à intercepter les evenement.
Voici le code:

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


public class jtext extends JDialog implements ActionListener{

jtext(String question){
super();
JLabel etiquette = new JLabel(question);
JTextField tf= new JTextField(25);

Container contentPane = getContentPane();
JPanel fen = new JPanel();
contentPane.add(fen);
fen.add(etiquette);
fen.add(tf);

JButton ok=new JButton("OK");
JButton annuler=new JButton("annuler");
fen.add(ok);
fen.add(annuler);

setContentPane(fen);

setTitle("feuille de temps");
setBounds(200,200,200,200);
pack();
setModal(true);
show();
setVisible(true);

String saisie = new String();//surement variable global
saisie = tf.getText( );

ok.addActionListener(this);
ok.setActionCommand ("ok");
annuler.addActionListener(this);
annuler.setActionCommand ("annuler");
}


public void actionPerformed (ActionEvent e){


if("ok".equals(e.getActionCommand())){
System.out.println("bonjour");
this.setModal(false);
this.setVisible(false);
this.dispose();
// ouvre une autre fenetre basedialog queltypedeclient=new basedialog();
}


if("annuler".equals(e.getActionCommand())){
System.out.println("bonjour");
}

}
}

Merci à ceux qui m'aideront.

3 réponses

Messages postés
123
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
26 août 2012
3
Salut,

je préfère te le dire immédiatement : je ne sais pas pourquoi tu ne peux pas récupérer tes événements. J'ai testé chez moi, et ça le fait aussi. J'ai même essayé sur l'événement de fermeture de la boîte de dialogue, et ca ne marche pas non plus. Le problème est dû au fait que ta boîte de dialogue est MODALE(setModal(true);). Si tu enlèves cette instruction ca marche nickel. Alors pourquoi ca ne marche pas si elle est modale ?? C'est vraiment bizarre !!
Je suis donc intéressé par la solution de ce problème. Si tu as trouvé la solution, ou si quelqu'un d'autre peut la donner, indiquez-là ici ce serait sympa.

Les seules choses que je peux te dire :

- N'utilise pas la méthode "show()", la méthode setVisible(true) suffit.
- Indique à ta boite de dialogue quel est son parent :
jtext(Frame parent,String question){
super(parent);
....
}

Voilà.

@+
Messages postés
10
Date d'inscription
jeudi 6 janvier 2005
Statut
Membre
Dernière intervention
18 avril 2005

Salut voilà le résultat, je pense show et setVisible, ne nous doivent pas être déclarées ensemble lors d'un modal(true).
Mon nouveau problème est que je n'arrive pas à réccupérer le champs d'une choice() ou d'une JCheckcomboBox!!!!
Pourquoi je dois indique quel est son parent.

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


public class Question1 extends JDialog implements ActionListener{
String saisie;//variable global pour etre appeler dans toutes les fonctions
JTextField tf= new JTextField(25);//variable global pour etre appeler dans toutes les fonctions

//Constructeur de Question1
Question1(String question){
super();//constructeur de la classe parente
Container contentPane = getContentPane();
JLabel etiquette = new JLabel(question);
JPanel fen = new JPanel();
contentPane.add(fen);
fen.add(etiquette);
fen.add(tf);

JButton ok=new JButton("OK");
JButton annuler=new JButton("annuler");
fen.add(ok);
fen.add(annuler);

setContentPane(fen);
setTitle("feuille de temps");
//setBounds(200,200,200,200);
pack();
setModal(true);//met la fenetre au premier plan

tf.addActionListener(this);//ecoute ce qu'il ya dans la liste
ok.addActionListener(this);
ok.setActionCommand("ok");
annuler.addActionListener(this);
annuler.setActionCommand("annuler");

setVisible(true);//rend visible la fenetre
}

//Fonction que sera appeller pour retenir le nom
public String nom(){
String b=saisie;
return b;}
//ecoute les bouttons
public void actionPerformed (ActionEvent e){

if("ok".equals(e.getActionCommand())){
saisie = tf.getText();
System.out.println(saisie);
dispose();
}

if("annuler".equals(e.getActionCommand())){
dispose();

}

}
}
Messages postés
123
Date d'inscription
mardi 5 août 2003
Statut
Membre
Dernière intervention
26 août 2012
3
"Salut voilà le résultat, je pense show et setVisible, ne nous doivent pas être déclarées ensemble lors d'un modal(true)."
-------> Tu veux surement dire appelées et non pas déclarées. Mais ca vient pas de ca. En fait lorsqu'une boîte de dialogue est modale, l'appel de la méthode show ou de setVisible(true) est bloquant, et se débloque uniquement lorsque la boîte de dialogue a été cachée (hide() ou dispose() ou setVisible(false)). C'est pour cette raison que ta première version ne fonctionnait pas, puisque tu liais les boutons à leur gestionnaire d'événement qu'APRES avoir effectué l'affichage de la boite de dialogue( show() ) ; l'appli effectuait donc ces liens qu'après la fermeture de la boite de dialogue. Faut donc appeler la méthode d'affichage qu'après avoir fait tous les liens avec les gestionnaires d'événements, ce que tu as fait dans ton second exemple, qui marche donc.

"Pourquoi je dois indique quel est son parent."
--------> Teste ca et tu verras :
lance ton application, fait apparaître ta boite de dialogue, ouvre en plein écran une autre application (ex. : Traitement de texte, navigateur, etc..) qui cache donc la fenêtre principale et la boîte de dialogue de ton appli java. Ensuite appuie sur le bouton, dans la barre des tâches en bas de ton écran, correspondant à ton application java afin de la refaire passer au premier plan. Et tu remarqueras que seule la fenêtre principale passera au premier plan, la boîte de dialogue étant restée en arrière plan car elle n'est PAS attachée à sa fenêtre parente, elle n'a AUCUN lien avec elle. Si tu la lies avec son parent, elle passera également au premier plan.

Et voilou !! Problème résolu.

@+