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 :

Capturer Listener/Observer ?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Par défaut Capturer Listener/Observer ?
    Bonjour !

    Voila je dois mettre à jour un modèle de JComboBox pour cela j'utilise je supprime d'abord tous mes éléments, je réinsère les éléments de base et ensuite j'introduis de nouveaux éléments grace à la méthode de MyComboModel suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      public void refresh(FileNode node) {
        this.removeAllElements();
        for(int i=0; i<original.length; i++) {
          this.addElement(original[i]);
        }
        this.addRepertoires(node);
      }
    Le problème est que removeAllElements() et addElement(original[i]) (juste dans le premier tour de boucle) mettent successivement à jour le modèle de la JComboBox et ainsi déclenche l'Observer du modèle de mon programme de manière répétitive...
    Il me faudrait soit pouvoir créer tous les changements d'une traite (sorte d'application directe d'un nouveau modele) ou alors pouvoir capturer les éléments déclencheur de removeAllElements()...

    Je ne sais vraiment pas quoi faire, quelqu'un aurait il une idée ?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Par défaut
    En fait chacune de ces méthodes déclenche mon ActionListener de ma JComboBox c'est pourquoi j'y ai appliqué plutôt un MouseListener mais celui ci ne me permet pas d'obtenir l'élément selectionner à mon 2 ème clic ou alors je ne vois pas comment faire... C'est pour ca que dans ma classe anonyme MouseListener je la double par un ActionListener qui lorsque je change l'état de la Combo, par un clic dans sa liste, me permet de déclencher mon action voulu...

    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
     
        cadresse.addMouseListener(new MouseAdapter(){
          public void mouseClicked(MouseEvent e) {
            if(cadresse.getActionListeners().length>0)
              cadresse.removeActionListener(cadresse.getActionListeners()[0]);
            cadresse.addActionListener(new ActionListener () {
              public void actionPerformed(ActionEvent e) {
                if((FileNode) cadresse.getSelectedItem() !=null && !((FileNode) cadresse.getSelectedItem()).toString().equals("Bureau")) {
                  System.out.println("ACTION " + cadresse.getSelectedItem());
                  Explorer.model.actualiser( (FileNode) cadresse.getSelectedItem());
                }
              }
            });
          }
        });
    Je pense que le problème vient plutôt de là, vu que le raffrachissement de ma JComboBox se fait très bien en utilisant la méthode du post précédent mais en passant par un autre composant déclencheur...

    Une idée comment mieux coder tout ca ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 18
    Par défaut
    Utilise insertItem(Object, int) au lieu de addItem(Object).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Par défaut
    Euh je n'utilise pas de addItem...?

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 18
    Par défaut
    Désolé,

    je voulais dire à la place de addElement(Object).

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 18
    Par défaut
    Je reprends :

    Utilise insertItemAt(Object, int) au lieu de addElement(Object).

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Par défaut
    Oui dslé j'avais pas réfléchi...

    Je viens de tester ca marche nickel !!! Mais j'y comprends pourquoi ca !!!!?

    Ca change quoi ?

    MERCI 10^1000000 DE FOIS !!!!

  8. #8
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 18
    Par défaut
    Pour faire simple, la méthode adElement(Object) fait appel à fireIntervalAdded(this, index, index) héritée de AbstractListModel. Cette méthode envoie une notification au listener pour lui signifier qu'1 ou plusieurs éléments ont été ajoutés au model.

    fireIntervalAdded(this, index, index) :
    AbstractListModel subclasses must call this method after one or more elements are added to the model. The new elements are specified by a closed interval index0, index1 -- the enpoints are included. Note that index0 need not be less than or equal to index1.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 17
    Par défaut
    Woua! Oki c'est pour ca que je voulais bloqué les listener à la base je comprends mieux... L'autre méthode n'avertie pas le modèle...

    Merci encore! Ca me retire vraiment une épine du pied!

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

Discussions similaires

  1. Listener & Observable/Observer
    Par thebossbest dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 19/04/2013, 11h15
  2. TNS:listener could not resolve SERVICE_NAME given in connect
    Par Sinclair dans le forum Administration
    Réponses: 15
    Dernier message: 20/08/2003, 17h26
  3. Capture d image par webcam
    Par moimoimoi3x dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/07/2003, 08h48
  4. DoubleClick Listener & ENTER
    Par Pro_Fete dans le forum Composants
    Réponses: 4
    Dernier message: 27/01/2003, 13h23
  5. Réponses: 3
    Dernier message: 01/11/2002, 14h30

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