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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    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 averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    pas une seule idée !!!!!!!

  3. #3
    Membre éprouvé
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    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));

  4. #4
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    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 éprouvé
    Inscrit en
    Septembre 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 147
    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.

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

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 3
    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 averti
    Inscrit en
    Décembre 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 35
    Par défaut
    merci mais ton "e" correspond à koi?

+ 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