Nouvelle fenetre servant de formulaire...

Signaler
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003
-
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003
-
Bonjour,

Je souhaite creer une nouvelle fenetre ou je vais pouvoir saisir des informations qui devront par la suite etre utilisees par l'application(donc la fenetre) principale. Je ne travaille pas avec un outil de type JBuilder, je dois donc taper l'ensemble du code.
Je voudrais deja savoir pour la creation de ma fenetre si je dois creer une instance d'une classe generale "Fenetre" ou bien creer une nouvelle classe "Nouvelle_fenetre" en l'instanciant. Disons que je ne vois pas l'interet de faire une classe generale, le seul point commun entre les deux etant le fait qu'il y a un titre! Pas de methode generale...

Ensuite pour la question de formulaire. je voudrais qu'en validant ce formulaire la fenetre se ferme, puis les variables soient envoyees dans l'appli principale. Comment transferer ces variables?

D'avance merci de vos reponses. A bientot. :)

14 réponses

Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
salut,

effectivement dans ton cas, tu as tout interet as créer une nouvelle classe.

Le mieux a faire est de la dérivée de JDialog car c'est plus sympa pour récupérer les infos et de plus, tu peux la rendre modale (c'est a dire que tu obliges l'utilisateur a devoir la fermer pour pouvoir retravailler sur la fenetre principale).

Pour l'échange de données, soit tu te fait des méthodes get pour chaque info que tu veux récupérer, soit tu fais une méthode qui te renvoit une HashMap qui contiendra toutes tes infos (HashMap, HashTable ou Vector ... peut importe)

Exemple :

la classe dérivée de JDialog (faudra rajouter les imports !)
public class NouvelleFenetre extends JDialog implements ActionListener
{
     private JButton       _ok;
     private HashMap     _infos;

      public NouvelleFenetre()
     {
          super(new JFrame(),"titre",true);
          /* le premier arg t'évite d'avoir a passer en arg a
          ton constructeur ta fenetre principale !
          le 2eme arg c'est le titre,
          le 3eme arg rend ta dialog modale,
          apres tu construit ta fenetre comme pour une JFrame*/

          _ok = new JButton("ok");
          _ok.addActionListener(this);
      }

      public void startDialog()
      {
           // lance le dialogue avec ta fenetre
           // tant que le setVisible(false) n'a pas lieu,
           // c'est ta fenetre qui garde la main !!
           setVisible(true);

           // tu peux rajouter ici d'autres traitements
           // par exemple :
          _infos = new HashMap();
       }

      public void actionPerformed(ActionEvent e)
      {
            // si ton bouton de valid s'appelle ok
            if (e.getSource() == ok)
            {
                // tu remplit ta map avec tes champs
               // par ex si tuas un champ text _nom
                _infos.put("nom", _nom.getText());
                ......

               // la tu mets fin au dialogue et tu rends la main
               // a ta fenetre
               setVisible(false);
             }
       }

      // Méthode pour récupérer les infos
      public HashMap getInfos()
      {
           return _infos;
       }
}


Pour ta fenetre principale quelque part dans le code:


NouvelleFenetre fen = new NouvelleFenetre();
fen.pack();

// tu lances le dialogue
fen.startDialog();

// tu récupère les données quand le dialogue est fini
HashMap donnees = fen.getInfos();



Voila

Duss
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

Whaou!

Bon je n'ai plus qu'a me mettre au travail alors!

Merci beaucoup pour ton aide. Mais j'en aurais peut-etre encore besoin...! :-p

++
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

J'ai un probleme avec cette ligne:

public class NouvelleFenetre extends JDialog implements ActionListener


J'ai un message d'erreur me disant que ActionListener etant une interface, je dois declarer ma classe en abstraite.
Et effectivement, si je la declare en abstraite, ca compile.
Je ne comprend pas pourquoi... Je n'y connais pas grand chose en classe abstraite, mais elles ne doivent contenir que des methodes normalement pas vrai? Or celle la n'est pas abstraite.

Je ne vois pas la... Si quelqu'un pouvait m'expliquer... merci d'avance. ;)
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

Je ne comprends pas ta methode pour passer des variables d'une fenetre a une autre.

Voici mon code:


//Classe fenetre

public class fenetre extends JFrame                              
{  
public int nombre;
         public fenetre()                                            
         {           
          }     
          public int getnombre()
          {
              return nombre;
          }
}



Puis ma nouvelle fenetre:


public class new_fenetre extends JFrame
{
public new_fenetre
{
int reponse = fenetre.getnombre();
}
}



Et bien ca ca ne marche pas! Ou est mon erreur?

Merci de votre aide. :)
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
bien,

tout d'abord, pour le probleme de classe abstraite :

le fait d'implémenter ActionListener t'oblige a implémenter la méthode :
public void actionPerformed(ActionEvent e)
{

}


si tu ne le fais pas, il faut que ta classe soit abstraite afin de forcer ses dérivées à implémenter cette méthode !!

Pour ce qui est du passage de paramètre, la méthode que je t'ai indiquée ne marcheras que si tu dérive de JDialog et que tu rends ta JDialog modale !

Voilà

Duss
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

Merci pour ton aide.

Je vais voir cela. Mais n'y-a-t-il pas une methode plus simple? Je pensais sinon recuperer mes valeurs dans ma fenetre principale, et jsute les envoyer dans ma seconde fenetre.

public class Fenetreun
{
     public fenetreun()
     {
      int var = 0;
      }
}



Puis:

public class Fenetredeux
{
     public fenetredeux()
     {
      int reponse = //recuperer var
      }
}


Comment puis-je faire cela le plus simplement possible, et en ne pasant pas par un JDialog?

Merci encore de votre aide ;)
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
salut,

bon alors a ce moment la, il faut que tu passes ta fenetre principale en argument dans ton constructeur de ta fenetre secondaire et la tu pourras communiquer entre les deux !

public class Fenetreun
{
private int var;

public fenetreun()
{
var = 0;
}

public setVar(int valeur)
{
var = valeur;
}
}



public class Fenetredeux
{
private FenetreUn fen1;

public fenetredeux(FenetreUn source)
{
fen1 = source;

.........

fen1.setVar(ce que tu veux passer);
}
}



Duss
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

Exact ca marche.

Merci beaucoup pour ton aide ;)
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
de rien, n'hésite pas si tu as d'autres questions
;)
Duss
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

J'ai d'autres questions. :-p

Mille et mille excuses pour la fausse joie, mais il reste un probleme.

Voici mon code:

public class Fenetreun
{
private int var;

public fenetreun()
{
var = 0;
}

public setVar(int valeur)
{
var = valeur;
}
}



Puis

public class Fenetredeux
{
private FenetreUn fen1;

public fenetredeux(FenetreUn source)
{
fen1 = source;

.........

fen1.setVar(ce que tu veux passer);
}
}


Mais:


public void actionPerformed(ActionEvent evenement_stat)         //Evenement du bouton passe en parametre (declencheur de l'action)
            {
                FenetreDeux fen_stat = new FenetreDeux(//ici probleme); //code creant la fenetre FenetreDeux
            }


Le dernier code s'execute lors du clique sur un bouton. Or je dois passer aussi ici en parametre une fenetre. Et je ne peux pas passer l'instance de ma FenetreUn. Cela marche si je fais:


public void actionPerformed(ActionEvent evenement_stat)         //Evenement du bouton passe en parametre (declencheur de l'action)
            {
                FenetreDeux fen_stat = new FenetreDeux(new FenetreUn()); //code creant la fenetre FenetreDeux
            }


Ce qui revient au meme! J'ai toujours une deuxieme fenetre de cree. Sinon je peux peut-etre creer une classe abstraite avec les methodes, car le constructeur veut une autre fenetre, et non pas la principale!
Je continue de voir. Vraiment desole pour cette fausse joie!

Merci et ++ Et bon courage ?-) . Moi je vais aller pleurer un petit moment ca va me faire du bien :clown)
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
il suffit que tu fasses :

public void actionPerformed(ActionEvent evenement_stat) //Evenement du bouton passe en parametre (declencheur de l'action)
{
FenetreDeux fen_stat = new FenetreDeux(this); //code creant la fenetre FenetreDeux
}



this <- te renvoit ta fenetre dans laquelle tu te trouves
;)

Duss
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

Ca ne marche pas ?-) .

En fait ce code se trouve dans une classe "MenuPrincipal extends JMenuBar" qui contient donc le menu de ma fenetre principale. Or le "this" va me renvoyer la fenetre dans laquelle je me trouve, ben ici ca ne fonctionne pas.

En fait j'ai vu d'autres sources ou le menu se trouvait directement dans le constructeur de la fenetre principale, et non pas dans une autre classe comme ici. Ca resoudrait peut-etre mon probleme, mais je trouve cela moins propre.

Tu en penses quoi?

Thanks a lot (ca change de merci... :-p )
Messages postés
890
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
29 juillet 2004
12
bien,
essayes un

this.getParent()


a la place du this, ca devrait te renvoyer la fenetre !!

Duss
Messages postés
39
Date d'inscription
jeudi 23 janvier 2003
Statut
Membre
Dernière intervention
3 juin 2003

Ca ne marche toujours pas!

C'est que ca va presque commencer a devenir drole dis donc... :blush) .

Merci beaucoup pour ton aide, mais je crois que j'ai aussi une autre erreur. Je te tiens au courant.

Merci encore et ++