associer une action lors de la creation de boutons

associer une action lors de la creation de boutons - Java - Programmation

Marsh Posté le 26-06-2004 à 15:58:36    

Bonjours.
 
Je voudrais créer un programme java qui permet de gérer des place (de spectacle par exemple)
 
Ainsi chaque places sera représenté par un bouton
(par exemple si le nombre de places est de 50, il y aura 50 boutons dans une fenetre)
 
La partie du programme permettant ceci est la suivante:
 
  Container panneau = fenetre7.getContentPane();
  panneau.setLayout (new GridLayout ((nbPlaces/10),10,1,1));
   
  for(int i=1;i<=nbPlaces;i++)
  {
    if(i<10)
    {
      panneau.add(new JButton("Place 0"+i));
    }
    else
    {  
      panneau.add(new JButton("Place "+i));
    }
  }
   
  fenetre7.pack();
  fenetre7.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  fenetre7.show();

 
Mon problème est le suivant :
Je voudrai donc que lorsqu'on appui sur un des boutons une fenetre apparaisse permettant la saisie des caractéristiques du client (son nom, prénom ....)
 
 
Merci pour votre aide.

Reply

Marsh Posté le 26-06-2004 à 15:58:36   

Reply

Marsh Posté le 26-06-2004 à 20:50:36    

jj59 a écrit :

Bonjours.


 
 [:ddr555]  
 

Citation :

Je voudrais créer un programme java qui permet de gérer des place (de spectacle par exemple)
 
Ainsi chaque places sera représenté par un bouton
(par exemple si le nombre de places est de 50, il y aura 50 boutons dans une fenetre)
 
La partie du programme permettant ceci est la suivante:
 
  Container panneau = fenetre7.getContentPane();
  panneau.setLayout (new GridLayout ((nbPlaces/10),10,1,1));
   
  for(int i=1;i<=nbPlaces;i++)
  {
    if(i<10)
    {
      panneau.add(new JButton("Place 0"+i));
    }
    else
    {  
      panneau.add(new JButton("Place "+i));
    }
  }
   
  fenetre7.pack();
  fenetre7.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  fenetre7.show();

 
Mon problème est le suivant :
Je voudrai donc que lorsqu'on appui sur un des boutons une fenetre apparaisse permettant la saisie des caractéristiques du client (son nom, prénom ....)
 
 
Merci pour votre aide.


 
ben deja:
JButton bt = new JButton("Place 0"+i); << tu le crée c'est bien mieux ;)
bt.setActionCommand("0"+i); // par exemple
bt.addActionListener(this) << ta classe implementera actionListener
 
panneau.add(bt);
 
apres tu mettras ce qu'il faut dans actionPerformed grace au getActionCommand() de ActionEvent


Message édité par veryfree le 26-06-2004 à 20:51:14
Reply

Marsh Posté le 27-06-2004 à 14:44:24    

je suis désolé je n'est pas beaucoup touché aux interfaces graphiques cette année.  
 
Donc j'ai fait ce que vous m'avez dit et voici se que sa donne :
 
Container panneau = fenetre7.getContentPane();
  panneau.setLayout (new GridLayout ((nbPlaces/10),10,1,1));
 
  for(int i=1;i<=nbPlaces;i++)
  {    
    if(i<10)
    {
      JButton bt = new JButton("Place 0"+i);
      bt.setActionCommand("0"+i);
      bt.addActionListener(this);
      panneau.add(bt);
    }
    else
    {  
      JButton bt = new JButton("Place "+i);
      bt.setActionCommand("0"+i);
      bt.addActionListener(this);
      panneau.add(bt);
    }
  }
   
  fenetre7.pack();
  fenetre7.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  fenetre7.show();
   
  fenetre1.setVisible(false);

 
J'espere que c'est bien sa qu'il fallait faire mais je ne sait toujours pas comment faire apparaitre une fenetre lorsqu'on appuit sur un des boutons, désolé.
 
Merci pour votre aide

Reply

Marsh Posté le 27-06-2004 à 18:02:10    

ben apres tu gere dans le actionperformed:
 
public void actionPerformed(ActionEvent e){
 
taframe.setVisible(true);
 
mais si y a des conditions par rapport au bouton ce serait bien de recupérer l'actionCommand mais apparament t'en a pas besoin...
}

Reply

Marsh Posté le 28-06-2004 à 11:21:17    

Ouais sa marche que pour le dernier bouton créé.
En effet si je construit 5 boutons, si j'appuis sur le bouton :
 
- "Place 01" sa ne marche pas.
- le 2 , 3 et 4 non plus
 
mais par contre pour le bouton "Place 05", la fenetre s'affiche bien

Reply

Marsh Posté le 28-06-2004 à 11:45:51    

Si je me trompe, je te conseille de faire une classe adaptée à ton probleme:
 
class MonJButton implements ActionListener
{
  // une référence vers les données représentées par ce    
  // bouton
   ...
  public void actionPerformed(ActionEvent e) {
    ...    
  }
}
 
Dans ton code précédent, t'as juste à changer JButton par MonJButton
et le this de addActionListener par bt et peut être d'autre truc ^^.

Reply

Marsh Posté le 28-06-2004 à 12:03:02    

Désolé, j'ai pas tout compris.
 
Comme je l'ai dit je n'est pas fait beaucoup d'interface graphique cette année (je suis en 1er année de dut info)
et tout ce qui est ActionListener, actionPerformed .... , je ne maitrise pas du tout.
 
Pouvez vous m'eclairer davantage svp.
 
Merci pour votre aide

Reply

Marsh Posté le 28-06-2004 à 14:17:17    

ActionListener c'est une interface, c'est à dire un ensemble de méthode virtuelle (i.e pas implémentées) (classe virtuelle pure en C++)
 
la classe qui est définie "implements UneInterface" signifie qu'elle définit les méthodes de l'interface UneInterface.
 
Dans l'interface ActionListener, il y a une méthode :
ActionPerformed(...)
Cette méthode est appelée par le gestionnaire d'événement de  
la machine virtuelle lorsque tu cliques ou tu actionnes (touche entrée) le composant.
 
MAIS
 
pour que cette méthode soit appelée, il faut préciser au gestionnaire d'évenement que la méthode Actionperformed, en cas d'action de l'utilisateur a été définie et doit être appelée, pour le composant graphique en question.
 
Pour cela, il faut rajouter le code:
 
LeComposant.addActionListener(listenerRef),
 
où listenerRef est une référence(pointeur) vers l'interface qui contient la méthode devant être appelée en cas d'action de l'utilisateur.
 
 
Du coup, pour ce qui concerne tes boutons, tu tapes le code que je t'ai passé et tu rajoutes un AddActionListener à chaque objet dont tu veux récupérer un click ou ou la frappe de la touche ENTREE.
 
le principe est le même pour tous les Listeners. Si t'as compris ça, ba tu peux faire pas mal de truc avec la gestion des événements.
 
Voilà j'espère avoir été clair. ^^
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed