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

SWT/JFace Java Discussion :

Action sur des boutons crées dynamiquement


Sujet :

SWT/JFace Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 21
    Points
    21
    Par défaut Action sur des boutons crées dynamiquement
    bonjour à tous,

    voila je souhaiterai (comme mon titre le dit) effectuer des actions sur des bouton créer dynamiquement, pour cela je crée un tableau de bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    final Button[] boutonp = new Button[4];
    int j=0;
    ...
    boutonp[j] =new Button(composite[j], SWT.CENTER);
    		boutonp[j].setFont(font);
    		boutonp[j].setText(" + ");
    et qd je fais les actions:
    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
     
    boutonp[j].addListener(SWT.Selection, new Listener() {
    		      public void handleEvent(Event event) {
    		    	j++;
    		    	System.out.println(" bouton "+j+" créer");
    		    	filtre[j] = new Composite_Filtre();
    		  	filtre[j].createCompoFiltre(composite_zoneW, 1);
    		    	composite[j] = new Composite(composite_zoneW, SWT.CENTER);
    		  	GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_CENTER);
    		  	composite[j].setLayoutData(gridData);
    		  	GridLayout griddLayout = new GridLayout();
    		  	griddLayout.numColumns = 2;
    		  	composite[j].setLayout(griddLayout);
    		  	composite[j].setBackground(couleur);
    		  	boutonp[j] =new Button(composite[j], SWT.CENTER);
    		  	boutonp[j].setFont(font);
    		  	boutonp[j].setText(" + ");
    ....
    le truc c'est que l'action ne se fait que quand je clique sur le premier bouton (où j=0) et pas sur les autres ....


    merci de vos réponses.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    pas une seule idée !!!!!!!

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 146
    Points : 150
    Points
    150
    Par défaut
    Le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    new Listener() {
    public void handleEvent(Event event) {
    ...
    }
    }
    est une définition de classe.
    Le code contenu dans la méthode handleEvent(Event event) ne sera executé qu'à l'appel de la méthode cad au déclenchement de l'évènement.
    l'incrémentation de j ne se fait donc pas.
    en plus, il n'y a pas de duplication de j cad que meme si j à la valeur 1 lorsque le listener du bouton 1 est défini, si tu continu à l'incrémenter, j augmente aussi dans tous tes listeners.

    Je te conseil plutot de definir ton listener avec un constructeur pour lui passer les variables dont tu as besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public MonListener implements Listener {
     
    private int index;
     
    public MonListener (int index) {
    this.index = index;
    }
     
    public void handleEvent(Event event) {
    		    	System.out.println(" bouton "+index+" créer");
                            ...
    }
    }
    puis de faire ta boucle comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for (j=0; j<max; j++) boutonp[j].addListener(SWT.Selection, new MonListener(j));
    Best Web Design Software ever - http://tweakstyle.com

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    merci pour ta réponse.

    le problème est que mes boutons sont crées en fonction des actions cad qu'au départ je n'ai qu'un bouton, quand j'appuie dessus, en deuxieme se crée et qd je clique sur celui-ci, un troisième etc etc...

    donc ton "max" me donne un forcement un null exeption ....

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 146
    Points : 150
    Points
    150
    Par défaut
    ma boucle était un exemple mais tu peux faire comme ca aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    boutonp[j].addListener(SWT.Selection, new MonListener(j));
    j++;
    à chaque fois que tu créé un bouton.
    Best Web Design Software ever - http://tweakstyle.com

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    attend attend , mon nouveau bouton est créer dans MonListener !!?, je suis un peu paumé là..

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par barthelus76
    bonjour à tous,

    voila je souhaiterai (comme mon titre le dit) effectuer des actions sur des bouton créer dynamiquement, pour cela je crée un tableau de bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    final Button[] boutonp = new Button[4];
    int j=0;
    ...
    boutonp[j] =new Button(composite[j], SWT.CENTER);
    		boutonp[j].setFont(font);
    		boutonp[j].setText(" + ");
    il faut modifier ici:
    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
     
    boutonp[j].addListener(SWT.Selection, new Listener() {
    		      public void handleEvent(Event event) {
    		    	for(int i=0;i<boutonp.lngth;i++) {//parcourir toules bouton 
                                              if(e.getSource()==boutonp[i]) {//si le bouton en question tu recupere l'indice
     
     
    		    	filtre[i] = new Composite_Filtre();
    		  	filtre[i].createCompoFiltre(composite_zoneW, 1);
    		    	composite[i] = new Composite(composite_zoneW, SWT.CENTER);
    		  	GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_CENTER);
    		  	composite[i].setLayoutData(gridData);
    		  	GridLayout griddLayout = new GridLayout();
    		  	griddLayout.numColumns = 2;
    		  	composite[i].setLayout(griddLayout);
    		  	composite[i].setBackground(couleur);
    		  	boutonp[i] =new Button(composite[j], SWT.CENTER);
    		  	boutonp[i].setFont(font);
    		  	boutonp[i].setText(" + ");
    }
    ....
    voila la reponse .

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    merci mais ton "e" correspond à koi?

  9. #9
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 146
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par barthelus76
    attend attend , mon nouveau bouton est créer dans MonListener !!?, je suis un peu paumé là..
    ah oui excuse moi.
    Dans ce cas c'est ca qu'il faut que tu fasse :
    (et pour mieux comprendre ce que tu fait, je te conseil de toujours séparer au maximum tes taches)

    Le listener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public MonListener implements Listener {
     
    private int index;
     
    public MonListener (int index) {
    this.index = index;
    }
     
    public void handleEvent(Event event) {
    createButton(index);                  
    }
    }
    la méthode de création d'un bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void createButton(int index) {
    //creation du bouton n° index
    ...
    boutonp[index] =new Button(composite[index], SWT.CENTER);
    boutonp[index].setFont(font);
    boutonp[index].setText(" + ");
    ...
    boutonp[index].addListener(SWT.Selection, new MonListener(index + 1) );
    System.out.println(" bouton "+index+" créé");   
    }
    La création du premier bouton :
    Best Web Design Software ever - http://tweakstyle.com

  10. #10
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 146
    Points : 150
    Points
    150
    Par défaut
    La solution de hou_ss marche aussi mais je trouve que ca sert à rien de rajouter une boucle pour tester l'indice du bouton qui a renvoyé l'évenement alors qu'il suffit de lui donner à la création du listener.
    Best Web Design Software ever - http://tweakstyle.com

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    merci Bitbis pour tes conseils, mais encore une ptites questionnettes, comment le listener connait la méthode "createButton" ??? (je sais je suis à la ramasse..)

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Points : 21
    Points
    21
    Par défaut
    bon, un bon repas et un bon café m'ont fait retrouver un peu de neuronne, ca marche...merci à tous.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par barthelus76
    bon, un bon repas et un bon café m'ont fait retrouver un peu de neuronne, ca marche...merci à tous.
    a ce que tu sai comment on fait pour metre a jour le graphe meri

  14. #14
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 146
    Points : 150
    Points
    150
    Par défaut
    Citation Envoyé par hou_ss
    a ce que tu sai comment on fait pour metre a jour le graphe meri
    et en français ?
    Best Web Design Software ever - http://tweakstyle.com

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

Discussions similaires

  1. [Labview 7.1]Débutant : action sur des boutons
    Par azerty-30 dans le forum LabVIEW
    Réponses: 7
    Dernier message: 02/06/2009, 10h03
  2. Aide sur la mise en place d'actions sur des boutons
    Par Drogba11 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 09/01/2009, 19h07
  3. Problème avec un tween sur des clips crées dynamiquement
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 21/05/2008, 17h43
  4. évènements sur plusieurs boutons crées dynamiquement
    Par Mangacker dans le forum C++Builder
    Réponses: 40
    Dernier message: 01/05/2008, 18h57
  5. "double action" sur des boutons
    Par jakouz dans le forum Struts 1
    Réponses: 2
    Dernier message: 06/05/2007, 23h35

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