Fenetre

Résolu
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 - 10 mai 2012 à 16:07
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 - 15 mai 2012 à 21:52
Bonjour,

Je suis en train de créer une application sur java,mais j'ai un soucis: j'arrive a créé la fenêtre avec 3 boutons, mais ces boutons ne font rien, et je ne comprends pas comment faire pour ajouter une action, d'après le tutoriel il faut que j'utilise ActionListener. Je ne comprends pas comment l'utiliser. Mon application comporte 3 boutons : quitter, gestion journalière et gestion d'un journal.

quitter doit fermer la fenêtre; je sais que dois utiliser setDefaultOnCloseOperation, mais comment? j'ai essayer quitter.setDefaultOnCloseOperation, mais cela ne fonctionne pas.

gestionJournalière doit afficher sur la fenetre 3 autres boutons : nouveaux, modifier, supprimer, liste.

gestionDUnJournal doit afficher la même chose : 3 bouttons = nouveaux, modifier, supprimer et liste.

Mon code :


import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLabel;




public class ProgrammeGestionJournal {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

JFrame Fenetre = new JFrame();
JButton quitter = new JButton("quitter");
JButton gestionDUnJournal= new JButton ("Gestion D'un journal");
JButton gestionJournaliere = new JButton ("Gestion Journalière");
JPanel pan = new JPanel();
JLabel label1 = new JLabel();
JLabel label2 = new JLabel();
JLabel label3 = new JLabel();


label1.add(quitter);
label2.add(gestionJournaliere);
label3.add(gestionDUnJournal);



pan.add(quitter);
pan.add(gestionJournaliere);
pan.add(gestionDUnJournal);

Fenetre.setVisible(true);
Fenetre.setTitle("Gestion d'un journal");
Fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Fenetre.setSize(500, 500);
Fenetre.setContentPane(pan);



}

}

Si vous pouviez m'aider en m'expliquant ce que vous faites et pourquoi, afin que je puisse bien comprendre comment faire et le reproduire, car la méthode ActionListener, je n'ai pas compris ainsi que la manière dont les actions sont faites à partir d'un boutton,

je vous remercie d'ors et déjà,

stoufy

8 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
11 mai 2012 à 08:00
Salut,

c'est assez simple...
Premièrement, la méthode setDefaultCloseOperation se fait sur ta JFrame et avec le comportement que tu attends, c'est même
Fenetre.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);


Concernant tes boutons, tu dois en effet leur ajouter un action listener...
Dans ton implementation du actionlistener (la méthode actionPerformed(ActionEvent event)), tu dois dire ce qu'il doit se passer lorsque tu cliques sur le bouton et donc appelle implicitement la méthode actionPerformed.
3
Utilisateur anonyme
11 mai 2012 à 09:25
Salut,


   import javax.swing.JFrame;
   import javax.swing.JButton;
   import javax.swing.JPanel;
   import javax.swing.JLabel;

   import java.awt.* ;
   import java.awt.event.* ;


   public class ProgrammeGestionJournal  implements ActionListener {
      private JButton quitter; // déclaré ici (variable de classe) pour être visible
                               // de toute les méthodes de cette classe.
                               
      private JButton gestionJournaliere;
      
      private JButton gestionDUnJournal;
    
      public ProgrammeGestionJournal() //CONSTRUCTEUR
      {
         JFrame Fenetre = new JFrame();
         
         quitter = new JButton("quitter"); // "créé" ici. Il reste à lui "associer" un écouteur:
         quitter.addActionListener(this);  // et afin de détecter le clique ajouter la méthode
       // on peut aussi quitter correctement en cliquant sur l'x blanc sur fond rouge fermer MAIS
       // SANS POUVOIR FAIRE DE TRAITEMENT SPÉCIFIQUE
         
         gestionJournaliere = new JButton ("Gestion Journalière");
         gestionJournaliere.addActionListener(this);
         
         gestionDUnJournal = new JButton ("Gestion D'un journal");
         gestionDUnJournal.addActionListener(this);
         
         JPanel pan = new JPanel();
         JLabel label1 = new JLabel();
         JLabel label2 = new JLabel();
         JLabel label3 = new JLabel();
      
         label1.add(quitter);
         label2.add(gestionJournaliere);
         label3.add(gestionDUnJournal);
      
         pan.add(quitter);
        pan.add(gestionJournaliere);
         pan.add(gestionDUnJournal);
      
         Fenetre.setVisible(true);
        Fenetre.setTitle("Gestion d'un journal");
         Fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        Fenetre.setSize(500, 500);
         Fenetre.setContentPane(pan);
      }
   /**
   * @param args
   */ 
      public static void main(String[] args)
      {
         ProgrammeGestionJournal pgj = new ProgrammeGestionJournal();
       // le code initialement dans la méthode main(....) static a été
       // passé dans le constructeur ProgrammeGestionJournal() (méthode
       // non statique et que this par exemple qui n'est pas static ne
       // pouvait être dans une méthode static...
      }
   
      public void actionPerformed( ActionEvent ae) // c'est donc ici qu'on détecte les cliques
                                                   // des boutons et surtout qu'on sait quel bouton
                                                    // a été cliqué
      {
         Object qui = ae.getSource(); 
         if( qui == quitter ) 
         { 
         //traitement bouton quitter
            System.out.println("Traitement FIN");
            System.exit(0);
         }
         
         if(qui == gestionJournaliere)
         {
         //traitement bouton gestionJournaliere (peut-être une classe, une méthode...)
            System.out.println("Traitement gestion journalière");
         }
         
         if(qui == gestionDUnJournal)
         {
            System.out.println("Traitement gestion d'un journal");
         }
      }
   }

Cordialement,

...\ Dan /...
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
11 mai 2012 à 18:48
Bonjour et merci Dan,
C'est exactement ce que j'avais besoin, maintenant j'aurai quelques questions relatifs à ton code, afin que je puisse bien le comprendre.

-tu as instancié un objet "pgj" qui n'est pas utilisé, il y a t-il une raison particulière à cela?
-imaginons (et d'ailleurs c'est l'exercice) que je veuille créé 4 boutons lorsque l'on appuie sur "gestion journalière", j'ai essayer le code suivant :

if(qui == gestionJournaliere)
{
JPanel pan2 = new JPanel();

JButton nouveau = new JButton("nouveau");
JButton supprimer = new JButton("supprimer");
JButton modifier = new JButton ("modifier");
JButton liste = new JButton ("liste");
pan2.add(nouveau);
pan2.add(supprimer);
pan2.add(modifier);
pan2.add(liste);


//traitement bouton gestionJournaliere (peut-être une classe, une méthode...)
System.out.println("Traitement gestion journalière");
}
Je sais qu'il ne fonctionne pas, mais je ne comprends pas pourquoi. Il est vrai que je n'ai pas utiliser ActionListener, mais à ce stade-ci, j'en ai pas vraiment besoin. Cela fait plusieurs heures que je me casse les ménages mais je comprends pas pourquoi cela ne fonctionne pas.

-Object qui = ae.getSource(); cette ligne de code je ne la comprends pas bien non plus; tu emploie l'objet ae auquel tu applique la méthode getSource() lui même contenu dans un autre objet "qui". D'après ma réflexion, "qui" est le véritable compteur de cliques....mais ensuite?

En tout cas, ta manière de coder, est plus compréhensible que dans mon tutoriel.

Encore une fois je te remercie pour ton aide,

Stouff.
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
12 mai 2012 à 00:14
J'ai réussi à trouver la solution à ma précédente question, cependant, un seul problème persiste: lorsque je clique sur "gestion journalière", les 4 autres boutons apparaissent bien sans problème, cependant lorsque je clique plusieurs fois sur ce même bouton, les boutons se créent à l'infini pourtant je n'ai pas employé de boucle!!!

voici mon nouveau code :

import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLabel;

import java.awt.* ;
import java.awt.event.* ;


public class ProgrammeGestionJournal implements ActionListener {
private JFrame Fenetre;
private JButton quitter;

private JButton gestionJournaliere;

private JButton gestionDUnJournal;
private JPanel pan;

public ProgrammeGestionJournal()
{
Fenetre = new JFrame();

//cration du boutton "quitter"

quitter = new JButton("quitter");
quitter.addActionListener(this);


//cration du boutton "gestion Journalire"

gestionJournaliere = new JButton ("Gestion Journalire");
gestionJournaliere.addActionListener(this);

//cration du boutton "Gestion d'un journal"

gestionDUnJournal = new JButton ("Gestion D'un journal");
gestionDUnJournal.addActionListener(this);

pan = new JPanel();

pan.add(quitter);
pan.add(gestionJournaliere);
pan.add(gestionDUnJournal);

Fenetre.setVisible(true);
Fenetre.setTitle("Gestion d'un journal");
Fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Fenetre.setSize(500, 500);
Fenetre.setContentPane(pan);
}
/**
* @param args
*/
public static void main(String[] args)
{
ProgrammeGestionJournal pgj = new ProgrammeGestionJournal();

}

public void actionPerformed( ActionEvent ae)
{
Object qui = ae.getSource();
if( qui == quitter )
{
//traitement bouton quitter
System.out.println("Traitement FIN");
System.exit(0);
}

if(qui == gestionJournaliere)
{


JButton nouveau = new JButton ("nouveau");
JButton supprimer = new JButton ("supprimer");
JButton liste = new JButton ("liste");
JButton modifier = new JButton ("modifier");

pan.add(nouveau);
pan.add(supprimer);
pan.add(liste);
pan.add(modifier);

Fenetre.revalidate();

}

if(qui == gestionDUnJournal)
{

JButton nouveau = new JButton("nouveau");
JButton supprimer = new JButton ("supprimer");
JButton liste = new JButton("liste");
JButton modifier = new JButton ("modifier");

pan.add(nouveau);
pan.add(supprimer);
pan.add(liste);
pan.add(modifier);

Fenetre.revalidate();

}
}


}
3

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

Posez votre question
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
12 mai 2012 à 00:16
-Object qui = ae.getSource(); cette ligne de code je ne la comprends pas bien non plus; tu emploie l'objet ae auquel tu applique la méthode getSource() lui même contenu dans un autre objet "qui". D'après ma réflexion, "qui" est le véritable compteur de cliques....mais ensuite?

Cette question est également toujours en suspend, je remercie Dan en tout cas pour l'aide apportée,

Stouff
3
Utilisateur anonyme
12 mai 2012 à 19:58
Ps,

 public ProgrammeGestionJournal(String gestJour) //CONSTRUCTEUR 2 String gestJour n'est pas utilisé
                                                 //mais permet d'avoir un 2eme constructeur
      {
         JFrame fenetre2 = new JFrame();
         ....
         ....

         fenetre2.setVisible(true);
         fenetre2.setTitle("Gestion journalière");
 /**
   * Remplacer (JFrame.EXIT_ON_CLOSE); qui fermerait toute l'appli
   * par (JFrame.DISPOSE_ON_CLOSE);
   * ce qui ne fermera (par clique sur le bouton X fermer) que la fenêtre
   * "Gestion journalière" et permettra de poursuivre avec la fenêtre
   * "Gestion d'un journal" restée en "embuscade" sous
   * la fenetre "Gestion journalière".
   **/
         //fenetre2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         fenetre2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
         fenetre2.setSize(500, 500);
         fenetre2.setContentPane(pan2);
      }


Cordialement,

...\ Dan /...
3
cs_Stoufy1605 Messages postés 61 Date d'inscription vendredi 7 janvier 2011 Statut Membre Dernière intervention 17 avril 2013 2
15 mai 2012 à 21:52
UN TRES GRAND MERCI A TOI DAN!!!!!!!!!!!!!!!!!!!!

Je comprends de mieux en mieux grâce à ton aide,

quel est la raison pour laquelle il faut absolument créer une variable String (String gestJour) afin de pouvoir créer une nouvelle fenetre, cela veut-il dire que pour chaque nouvelle fenetre, il faut créer une nouvelle variable?

Dans ce code, et apres mure réfexion, j'essaie d'integrer des JtextField sur la fenetre2 lorsque l'on appuie sur "nouveau".

voici le code qui ne fonctionne pas, pourrais-tu juste me dire ce qui ne vas pas et pourquoi cela ne fonctionne pas?



import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;

import Fenetre.Fenetre;


import java.awt.* ;
import java.awt.event.* ;


public class ProgrammeGestionJournal implements ActionListener {

private JButton quitter;

private JButton gestionJournaliere;

private JButton gestionDUnJournal;

private JButton nouveau;

private JButton modifier;

private JButton liste;

private JButton supprimer;


public ProgrammeGestionJournal()
{
JFrame fenetre = new JFrame();

//cration du boutton "quitter"

quitter = new JButton("quitter");
quitter.addActionListener(this);


//cration du boutton "gestion Journalire"

gestionJournaliere = new JButton ("Gestion Journalière");
gestionJournaliere.addActionListener(this);

//cration du boutton "Gestion d'un journal"

gestionDUnJournal = new JButton ("Gestion D'un journal");
gestionDUnJournal.addActionListener(this);



// Création des JLabel

JLabel Label1 = new JLabel();

JLabel Label2= new JLabel();

JLabel Label3= new JLabel();

Label1.add(quitter);
Label2.add(gestionJournaliere);
Label3.add(gestionDUnJournal);


// Création des JPanel

JPanel pan = new JPanel();
pan.add(quitter);
pan.add(gestionJournaliere);
pan.add(gestionDUnJournal);

fenetre.setVisible(true);
fenetre.setTitle("Gestion d'un journal");
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenetre.setSize(500, 500);
fenetre.setContentPane(pan);
fenetre.setLocationRelativeTo(null);
}

public ProgrammeGestionJournal (String gestJour)

{
JFrame fenetre2 = new JFrame();

JButton nouveau = new JButton ("nouveau");
nouveau.addActionListener(this);

JButton modifier = new JButton("modifier");
modifier.addActionListener(this);

JButton supprimer = new JButton ("Supprimer");
supprimer.addActionListener(this);

JButton liste = new JButton ("liste");
liste.addActionListener(this);


JPanel pan2 = new JPanel();
JLabel label21= new JLabel();

label21.add(nouveau);
label21.add(supprimer);
label21.add(modifier);
label21.add(liste);

pan2.add(liste);
pan2.add(nouveau);
pan2.add(modifier);
pan2.add(supprimer);

fenetre2.setVisible(true);
fenetre2.setTitle("Gestion Journalière");
fenetre2.setSize(500,500);
fenetre2.setContentPane(pan2);
}
public ProgrammeGestionJournal (int gj){

JFrame fenetre3= new JFrame("Gestion d'un journal");
nouveau.addActionListener(this);

JButton modifier = new JButton("modifier");
modifier.addActionListener(this);

JButton supprimer = new JButton ("Supprimer");
supprimer.addActionListener(this);

JButton liste = new JButton ("liste");
liste.addActionListener(this);


JPanel pan3 = new JPanel();
JLabel label22= new JLabel();

label22.add(nouveau);
label22.add(supprimer);
label22.add(modifier);
label22.add(liste);

pan3.add(liste);
pan3.add(nouveau);
pan3.add(modifier);
pan3.add(supprimer);

JTextField id = new JTextField("entrez votre id");

JTextField nom = new JTextField("entrez votre nom");

JTextField prénom = new JTextField("entrez votre prénom");

JTextField EmailAdress = new JTextField("entrez votre adresse e-mail");


pan3.add(nom);
pan3.add(prenom);
pan3.add(emailAdress);
pan3.add(id);


fenetre3.setVisible(true);
fenetre3.setTitle("Gestion d'un journal");
fenetre3.setSize(500,500);
fenetre3.setContentPane(pan3);

}



/**
* @param args
*/

public static void main(String[] args)
{
ProgrammeGestionJournal pgj = new ProgrammeGestionJournal();

}

public void actionPerformed( ActionEvent ae)
{
Object qui = ae.getSource();
if( qui == quitter )
{
//traitement bouton quitter
System.out.println("Traitement FIN");
System.exit(0);
}

if(qui == gestionJournaliere)
{

new ProgrammeGestionJournal ("Gestion Journalière");

}

if(qui == gestionDUnJournal)
{
new ProgrammeGestionJournal ("Gestion d'un Journal");

}
if (qui==nouveau)
{
new ProgrammeGestionJournal ("nouveau client");
System.out.println("voilà");


}



}


}
3
Utilisateur anonyme
12 mai 2012 à 01:12
Re,

"pgp" je pensais supprimer la méthode main(...) et lancer depuis une classe "utilisateur" et j'ai changé d'avis.

ProgrammeGestionJournal pgj = new ProgrammeGestionJournal(); permet de lancer mais new ProgrammeGestionJournal(); serait plus logique.

Tout d'abord (pour avancer) cas des boutons de "gestionJournaliere"
Créer une nouvelle fenêtre fenetre2 (pas Fenetre2, j'ai par ailleurs modifié Fenetre en fenetre conventions obligent) et ses label, le tout dans un nouveau constructeur instancié (on dit instancié ?) depuis le listener.
J'ai ajouté le premier : nouveau

Pour les autres faire la même chose.
J'ai presque oublié de joindre le code:
   import javax.swing.JFrame;
   import javax.swing.JButton;
   import javax.swing.JPanel;
   import javax.swing.JLabel;

   import java.awt.* ;
   import java.awt.event.* ;


   public class ProgrammeGestionJournal  implements ActionListener {
      private JButton quitter; // déclaré ici (variable de classe) pour être visible
                               // de toute les méthodes de cette classe.
      private JButton gestionJournaliere;
      private JButton gestionDUnJournal;
      
      private JButton nouveau;
    
      public ProgrammeGestionJournal() //CONSTRUCTEUR 1
      {
         JFrame fenetre = new JFrame();
      	
         quitter = new JButton("quitter"); // "créé" ici. Il reste à lui "associer" un écouteur:
         quitter.addActionListener(this);  // et afin de détecter le clique ajouter la méthode
       // on peut aussi quitter correctement en cliquant sur l'x blanc sur fond rouge fermer MAIS
       // SANS POUVOIR FAIRE DE TRAITEMENT SPÉCIFIQUE
         
         gestionJournaliere = new JButton ("Gestion Journalière");
         gestionJournaliere.addActionListener(this);
      	
         gestionDUnJournal = new JButton ("Gestion D'un journal");
         gestionDUnJournal.addActionListener(this);
         
         JPanel pan = new JPanel();
         JLabel label1 = new JLabel();
         JLabel label2 = new JLabel();
         JLabel label3 = new JLabel();
      
         label1.add(quitter);
         label2.add(gestionJournaliere);
         label3.add(gestionDUnJournal);
      
         pan.add(quitter);
         pan.add(gestionJournaliere);
         pan.add(gestionDUnJournal);
      
         fenetre.setVisible(true);
         fenetre.setTitle("Gestion d'un journal");
         fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         fenetre.setSize(500, 500);
         fenetre.setContentPane(pan);
      }
      
      public ProgrammeGestionJournal(String gestJour) //CONSTRUCTEUR 2 String gestJour n'est pas utilisé
      {
         JFrame fenetre2 = new JFrame();
         nouveau = new JButton("nouveau");
         nouveau.addActionListener(this);
      	
         JPanel pan2 = new JPanel();
         JLabel label2_1 = new JLabel();
         
         label2_1.add(nouveau);
         
         pan2.add(nouveau);
         
         fenetre2.setVisible(true);
         fenetre2.setTitle("Gestion journalière");
         fenetre2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
         fenetre2.setSize(500, 500);
         fenetre2.setContentPane(pan2);
      }
   /**
   * @param args
   */ 
      public static void main(String[] args)
      {
       //  ProgrammeGestionJournal pgj = new ProgrammeGestionJournal();
         new ProgrammeGestionJournal();
       // le code initialement dans la méthode main(....) static a été
       // passé dans le constructeur ProgrammeGestionJournal() (méthode
       // non statique car this par exemple qui n'est pas static ne
       // pouvait être dans une méthode static...
      }
   
      public void actionPerformed( ActionEvent ae) // c'est donc ici qu'on détecte les cliques
                                                   // des boutons et surtout qu'on sait quel bouton
      															// a été cliqué
      {
         Object qui = ae.getSource(); 
         if( qui == quitter ) 
         { 
         //traitement bouton quitter
            System.out.println("Traitement FIN");
            System.exit(0);
         }
         
         if(qui == gestionJournaliere)
         {
         //traitement bouton gestionJournaliere (peut-être une classe, une méthode...)
            System.out.println("Traitement gestion journalière");
            new ProgrammeGestionJournal("gestion journalière"); // constructeur 2
         }
         
         if(qui == gestionDUnJournal)
         {
            System.out.println("Traitement gestion d'un journal");
         }
          
         if(qui == nouveau)
         {
            System.out.println("Traitement bouton nouveau");
         }
      }
   }


Cordialement


...\ Dan /...
0
Rejoignez-nous