Création de JDialog

fred240683 Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 9 novembre 2004 - 28 oct. 2004 à 10:12
fred240683 Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 9 novembre 2004 - 2 nov. 2004 à 16:45
Bonjour .
Actuellement je developpe une application de client-serveur style messenger.
Voici mon code :

JFrame fen=new JFrame("Client"); //fenetre principale 
fen.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
JPanel panneauprincipal=new JPanel();
panneauprincipal.setLayout(new BorderLayout());

/*Menu de la fenetre*/
JMenu fichier=new JMenu("Fichier");
JMenu session=new JMenu("Session");
JMenu compte=new JMenu("Compte");
JMenuBar menuBar=new JMenuBar();
JMenuItem quitter=new JMenuItem("Quitter");
quitter.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
quitter.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK));
JMenuItem fermersession=new JMenuItem("Fermer sesssion");
fermersession.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
fermersession.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK));
JMenuItem changerpasswd=new JMenuItem("Changer mot de passe");
changerpasswd.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{

final JFrame fenchgerpasswd=new JFrame("Changer son mot de passe");//fenetre secondaire
  				final JPanel panneauchgerpasswd= new JPanel(new BorderLayout());
  
  				final JPanel changement=new JPanel(new GridLayout(4,2,0,0));
  				changement.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
  				changement.add(creeLabel("Pseudo: ",4));
  				final JTextField saisiePseudo= new JTextField();
  				saisiePseudo.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				changement.add(saisiePseudo);
  				changement.add(creeLabel("Ancien mot de passe: ",4));
  				final JTextField saisieOldPwd= new JTextField();
  				saisieOldPwd.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				changement.add(saisieOldPwd);
  				changement.add(creeLabel("Nouveau mot de passe: ",4));
  				final JTextField saisieNewPwd= new JTextField();
  				saisieNewPwd.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				changement.add(saisieNewPwd);
  				changement.add(creeLabel("Confirmation: ",4));
  				final JTextField saisieConfirmNewPwd= new JTextField();
  				saisieConfirmNewPwd.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				changement.add(saisieConfirmNewPwd); 
  				final JPanel chgementBas=new JPanel(new FlowLayout());
  				chgementBas.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
  				JButton bBasOK=new JButton("OK");
  				JButton bBasANNULER=new JButton("ANNULER");
  				bBasANNULER.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
fenchgerpasswd.setVisible(false);
}
});
bBasOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if ((saisiePseudo.getText()).length()!=0 && (saisieOldPwd.getText()).length()!=0 && (saisieNewPwd.getText()).length()!=0 && (saisieConfirmNewPwd.getText()).length()!=0)
{
if ((saisieNewPwd.getText()).compareTo(saisieConfirmNewPwd.getText())==0)
{
fenchgerpasswd.setVisible(false);
}
else
{
JOptionPane.showMessageDialog(fenchgerpasswd,"La confirmation n'est pas correcte","Message d'erreur",JOptionPane.ERROR_MESSAGE);
}
}
else
{
JOptionPane.showMessageDialog(fenchgerpasswd,"Tous les champs doivent être remplis","Message d'erreur",JOptionPane.ERROR_MESSAGE);
}
}
});
  				chgementBas.add(bBasOK);
  				chgementBas.add(bBasANNULER);
  
  
  				panneauchgerpasswd.add(changement,"Center");
  				panneauchgerpasswd.add(chgementBas,"South");
  				fenchgerpasswd.getContentPane().add(panneauchgerpasswd);
  		 
fenchgerpasswd.pack();
fenchgerpasswd.setVisible(true);

}
});
changerpasswd.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,InputEvent.CTRL_MASK));
JMenuItem listeconnect=new JMenuItem("Liste des connectés");
listeconnect.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
listeconnect.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
JMenuItem ouvrirsession=new JMenuItem("Ouvrir une session");
ouvrirsession.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
ouvrirsession.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
JMenuItem log=new JMenuItem("Se logger");
log.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
final JFrame fenlog=new JFrame("Changer son mot de passe");//fenetre secondaire
  				final JPanel panneaulog= new JPanel(new BorderLayout());
  
  				final JPanel logger=new JPanel(new GridLayout(2,2,0,0));
  				logger.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
  				logger.add(creeLabel("Pseudo: ",4));
  				final JTextField saisiePseudo= new JTextField();
  				saisiePseudo.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				logger.add(saisiePseudo);
  				logger.add(creeLabel("Mot de passe: ",4));
  				final JTextField saisiePwd= new JTextField();
  				saisiePwd.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				logger.add(saisiePwd);
  				final JPanel loggerBas=new JPanel(new FlowLayout());
  				loggerBas.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
  				final JButton bBasOK=new JButton("OK");
  				final JButton bBasANNULER=new JButton("ANNULER");
  				bBasANNULER.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
fenlog.setVisible(false);
}
});
bBasOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
if ((saisiePseudo.getText()).length()!=0 && (saisiePwd.getText()).length()!=0)
{
fenlog.setVisible(false);
}
else
{
JOptionPane.showMessageDialog(fenlog,"Tous les champs doivent être remplis","Message d'erreur",JOptionPane.ERROR_MESSAGE);
}
}
});
  				loggerBas.add(bBasOK);
  				loggerBas.add(bBasANNULER);
  
  
  				panneaulog.add(logger,"Center");
  				panneaulog.add(loggerBas,"South");
  				fenlog.getContentPane().add(panneaulog);
  		 		fenlog.pack();
fenlog.setVisible(true);
}
});
log.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L,InputEvent.CTRL_MASK));
JMenuItem creecompte=new JMenuItem("Créer un compte");
creecompte.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
final JFrame fencreecompte=new JFrame("Creer un compte"); //fenetre secondaire
  				JPanel panneaucompte= new JPanel(new BorderLayout());
  
  				JPanel ccompte=new JPanel(new GridLayout(3,2,0,0));
  				ccompte.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
  				ccompte.add(creeLabel("Pseudo: ",4));
  				JTextField saisiePseudo= new JTextField(20);
  				saisiePseudo.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				ccompte.add(saisiePseudo);
  				ccompte.add(creeLabel("Mot de passe: ",4));
  				JTextField saisiePwd= new JTextField(20);
  				saisiePwd.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				ccompte.add(saisiePwd);
  				ccompte.add(creeLabel("E-mail: ",4));
  				JTextField saisieemail= new JTextField(25);
  				saisieemail.setFont(new Font("MonoSpaced",Font.PLAIN,12));
  				ccompte.add(saisieemail);
  				JPanel ccompteBas=new JPanel(new FlowLayout());
  				ccompteBas.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
  				JButton bBasOK=new JButton("OK");
  				JButton bBasANNULER=new JButton("ANNULER");
  				bBasANNULER.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
fencreecompte.setVisible(false);
}
});
bBasOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
fencreecompte.setVisible(false);
}
});
  				ccompteBas.add(bBasOK);
  				ccompteBas.add(bBasANNULER);
  
  
  				panneaucompte.add(ccompte,"Center");
  				panneaucompte.add(ccompteBas,"South");
  				fencreecompte.getContentPane().add(panneaucompte);
  		 
fencreecompte.pack();
fencreecompte.setVisible(true);
//System.exit(0);
}
});
creecompte.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D,InputEvent.CTRL_MASK));
fichier.add(quitter);
session.add(ouvrirsession);
session.add(fermersession);
session.add(log);
compte.add(creecompte);
compte.add(changerpasswd);
compte.add(listeconnect);
menuBar.add(fichier);
menuBar.add(session);
menuBar.add(compte);
JTextField saisie =new JTextField(44);
JButton envoyer=new JButton("Envoyer");
envoyer.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));


J'aimerais faire en sorte que lorsque j'appuie sur un item dans mon menu, la fenetre qui s'ouvre soit active et que l'on ne puisse pas faire quelque chose sur la fenetre principale tant qu'elle n'est pas fermée. Je pense qu'il n'y que les JDialog qui font cela.
Quelqu'un pourrait t'il m'aider à transformer mes fenetres secondaires en JDialog si cela est la bonne solution.
Merci d'avance.

10 réponses

toffe12 Messages postés 53 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 23 septembre 2005 1
28 oct. 2004 à 11:27
Par exemple :

final JFrame fenlog=new JFrame(fen,"Changer son mot de passe",true);

fen est la frame parent

"Changer son mot de passe" : le titre de la fenetre

true : flag pour dire que la fenetre est modale c'est à dire elle doit etre ferme pour acceder à la fenetre mere (fen)

un conseil cree des classes séparer pour la fenetre mere et les fenetres filles, car avec les JDialog elles doivent etre tuée avant de pouvoir acceder à la fenetre mere alors le code

public void actionPerformed(ActionEvent e)
{
fencreecompte.setVisible(false);
}

ne fonctionnera pas, il faudra implementer le windows listener pour chaque fenetre fille !!

bon courage
0
fred240683 Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 9 novembre 2004
28 oct. 2004 à 20:21
ça ne marche pas il me dit que je dois défini fen en final et qu'il ne trouve pas de constructeur JFrame du type (fen," ",boolean).
Alors que faire ???
Peut tu me donner un exemple en ce qui concerne "un conseil cree des classes séparer pour la fenetre mere et les fenetres filles, car avec les JDialog elles doivent etre tuée avant de pouvoir acceder à la fenetre mere " svp
Merci d'avance
0
toffe12 Messages postés 53 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 23 septembre 2005 1
29 oct. 2004 à 11:38
escuse moi je me suis trompé (copier coller !!!!)

final JDialog fenlog=new JDialog(fen,"Changer son mot de passe",true);

mille pardon !!!

je regarde ton code pour extraire les fenetres filles

bon courage
0
fred240683 Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 9 novembre 2004
29 oct. 2004 à 13:03
oki merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fred240683 Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 9 novembre 2004
29 oct. 2004 à 13:05
attention toutes mes fenetres ne sont pas dans mon code.Je t'ai donné qu'une partie de mon code.
Donne moi un exemple pour une fentre fille je devrais reussir à me débrouiller.
Merci.
0
toffe12 Messages postés 53 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 23 septembre 2005 1
29 oct. 2004 à 17:37
OK,

un exemple


public class fencreecompte extend JDialog implements WindowListener
{

 public fencreecompte( Frame parent,String titre,Boolean modal)
{

super(parent,titre,modal); // appele le constructeur de la classe mere

JPanel panneaucompte= new JPanel(new BorderLayout());

JPanel ccompte=new JPanel(new GridLayout(3,2,0,0));
ccompte.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
ccompte.add(creeLabel("Pseudo: ",4));
JTextField saisiePseudo= new JTextField(20);
saisiePseudo.setFont(new Font("MonoSpaced",Font.PLAIN,12));
ccompte.add(saisiePseudo);
ccompte.add(creeLabel("Mot de passe: ",4));
JTextField saisiePwd= new JTextField(20);
saisiePwd.setFont(new Font("MonoSpaced",Font.PLAIN,12));
ccompte.add(saisiePwd);
ccompte.add(creeLabel("E-mail: ",4));
JTextField saisieemail= new JTextField(25);
saisieemail.setFont(new Font("MonoSpaced",Font.PLAIN,12));
ccompte.add(saisieemail);
JPanel ccompteBas=new JPanel(new FlowLayout());
ccompteBas.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
JButton bBasOK=new JButton("OK");
JButton bBasANNULER=new JButton("ANNULER");

bBasANNULER.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
   //setVisible(false);
// ton traitement
  System.exit(0);

}
});

bBasOK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
     //setVisible(false);
 // ton traitement
    System.exit(0);
}
});

ccompteBas.add(bBasOK);
ccompteBas.add(bBasANNULER);

panneaucompte.add(ccompte,"Center");
panneaucompte.add(ccompteBas,"South");
this.getContentPane().add(panneaucompte);

pack();
setVisible(true);
//System.exit(0);
}

} // fin constructeur

// classe du listener
public void windowOpened(WindowEvent e)
{
}

public void windowClosing(WindowEvent e)
{
}

public void windowClosed(WindowEvent e)
{
  // fermeture de la fenetre

System.exit(0);

}

public void windowIconified(WindowEvent e)
{
}

public void windowDeiconified(WindowEvent e)
{
}

public void windowActivated(WindowEvent e)
{
}

public void windowDeactivated(WindowEvent e)

}// fin de la classe



dans la classe mere tu met :

public void actionPerformed(ActionEvent e)
{
final JFrame fencreecompte=new fencreecompte(this,"Creer un compte",true); 
}


il y a peut etre des bugs car j'ai fait un peu vite sans tester

pour chaque fenetre fille tu reprend le modele

bon courage
0
toffe12 Messages postés 53 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 23 septembre 2005 1
29 oct. 2004 à 17:39
dans la classe mere tu met :

public void actionPerformed(ActionEvent e)
{
final JFrame fencreecompte=new fencreecompte(this,"Creer un compte",true);
}


il faut lire dans la classe appelante et non classe mere :sad)
0
fred240683 Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 9 novembre 2004
29 oct. 2004 à 19:01
ok merci mais ce que tu écris dans ton dernier mail était déjà dans le précédent alors as tu fais un copier coller sans regarder ???
0
toffe12 Messages postés 53 Date d'inscription vendredi 12 septembre 2003 Statut Membre Dernière intervention 23 septembre 2005 1
2 nov. 2004 à 09:29
Oui, je suis tres mauvais !!

public void actionPerformed(ActionEvent e)
{
final fencreecompte fencreecompte=new fencreecompte(this,"Creer un compte",true);
}

escuse moi la veille de we c'est terrible
0
fred240683 Messages postés 23 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 9 novembre 2004
2 nov. 2004 à 16:45
excuse-moi mais ou écris tu la classe fencreecompte! dans un nouveau fichier java ou dans le même que le void.
merci.
0
Rejoignez-nous