IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Evènement sur composant dynamique


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 72
    Points
    72
    Par défaut Evènement sur composant dynamique
    Hello,

    Comment gérer des évènements sur des objets créés dynamiquement ?

    J'ai une liste de bouton que j'ai mis dans un tableau, cf. code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    JButton[] buttons = new JButtons[size];
     
    for(int i = 0; i < size; i++){
       buttons[i] = new JButton("Bouton " + i);
       frame.getContentPane().add(buttons[i]);
    }
    Maintenant je souhaite mettre un évènement sur chaque bouton, par exemple "SurClick" et suivant le bouton faire une action différente.

    Merci pour aide.
    A dispo pour plus d'info,

    Bye

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Tout simplement quelque chose dans ce gout-là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    JButton[] buttons = new JButtons[size];
     
    for(int i = 0; i < size; i++){
       buttons[i] = new JButton("Bouton " + i);
       final int x = i;
       buttons[i].addActionListener(new ActionListener(){
          public void actionPerformed(ActionEvent e){
             System.out.println("Clic sur bouton " + x);
          }
       });
       frame.getContentPane().add(buttons[i]);
    }
    L'action est donc différente d'un bouton à un autre. Il faut donc que tu emploies le i pour définir l'action. Si tes boutons n'ont aucun rapport les uns avec les autres, ca ne sert à rien de les créer ainsi.

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 72
    Points
    72
    Par défaut
    Merci pr ta réponse, mais mouais ...

    Je voyais plus un truc comme ça :
    Il n'existe pas un moyen de faire une méthode - comme pour un bouton normal - mais de rajouter un paramètre 'i' qui serait le i ième bouton ??

    Bye

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par Sakapatate
    Merci pr ta réponse, mais mouais ...

    Je voyais plus un truc comme ça :
    Il n'existe pas un moyen de faire une méthode - comme pour un bouton normal - mais de rajouter un paramètre 'i' qui serait le i ième bouton ??

    Bye
    Tu pourrais être plus clair... Tu veux faire quoi exactement et c'est quoi qui va pas avec ma technique ?

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Regarde du côté de la classe Action et de la méthode getActionCommand().
    Sinon l'ActionEvent passé en paramètre de la méthode actionPerformed() dispose de la méthode getSource() permettant de connaître le composant source de l'événement.

  6. #6
    Membre actif Avatar de trax44
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 300
    Points : 233
    Points
    233
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(int i = 0; i < size; i++){
      buttons[i] = new JButton("Bouton " + i);
      frame.getContentPane().add(buttons[i]);
      buttons[i].addActionListener(this);
    }
     
    public void actionPerformed (ActionEvent e){
      switch(e.getModifchier){
        case 0: ton_code; break;
        case 1: ton_code; break; 
      }
    }
    Mais ça implique que tes boutons soit créer en premier pour que la clef du premier boutton soit 0.
    Regarde dans la java doc,

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public MaClasse extends JFrame implements ActionListener {
     
       ArrayList<JButton> buttons;
     
     
       public MaClasse {
          for(int i = 0; i<size; i++) {
             JButton b = new JButton();
             b.addActionListener(this);
             this.getContentPane().add(b);
             ....
       }
     
     
       public void actionPerformed(ActionEvent e) {
          if(e.getSource().getClass() == JButton.class) {
             JButton b = (JButton) e.getSource();
             for(int i = 0; i<buttons.size(); i++) {
                if ( b == buttons.get(i)) {
                   doSomething(i);
                }
             }
          }
       }
    }
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion d'un evenement sur composant dynamique
    Par darkman13130 dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/03/2009, 15h16
  2. Evénement sur controle dynamique
    Par windob dans le forum Langage
    Réponses: 9
    Dernier message: 28/05/2008, 19h49
  3. événement sur composants dynamiques
    Par kirua2150 dans le forum Delphi
    Réponses: 5
    Dernier message: 02/05/2007, 03h33
  4. [VBA-W] Evénement sur bouton créé dynamiquement
    Par ptilo dans le forum VBA Word
    Réponses: 9
    Dernier message: 21/06/2006, 11h08
  5. Evénement sur TMemo dynamique
    Par rasta girl dans le forum Delphi
    Réponses: 4
    Dernier message: 31/05/2006, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo