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

Langage Java Discussion :

Language]Listener sur booléen


Sujet :

Langage Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut Language]Listener sur booléen
    existe t il un listener qui permettrais d ecouter et d agir sur le changement d un boolean (par exemple quand il passe de true a false???)

    ou purrais t on en construire un ayant cette propriete la ???


    [Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Bonjour,

    Au moins trois pistes...

    (1) La plus simple, et qui correspond probablement à ton besoin : lancer une action depuis le "setter", c'est-à-dire la méthode qui est appelée pour modifier ce booléen.

    (2) Le couple Observable/Observer qui permet d'enregistrer plusieurs autres objets comme "observateurs" de celui qui contient le booléen, et de les avertir en cas de changement.

    Exemple :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    //par Nicolas_75
    import java.util.Observable;
    import java.util.Observer;
     
    // la classe contenant le champ à surveiller
    class ClasseA extends Observable {
     
        // le champ que l'on veut surveiller
        private int compteur = 0;
     
        public int getCompteur() {
            return compteur;
        }
     
        public void incrementeCompteurDe(int i) {
            compteur += i;
            System.out.println("L'instance de classeA a son compteur qui passe à "+compteur+" ; elle notifie les observateurs.");
            setChanged();
            notifyObservers(compteur);
        }
     
    }
     
    // la classe qui observe
    class ClasseB implements Observer {
     
        private String nomInstance = "";
     
        public ClasseB(String s) {
            nomInstance = s;
        }
     
        public void update(Observable o, Object arg) {
            System.out.println(nomInstance+" a été averti d'un changement dans l'objet qu'il observe, et dont le compteur est passé à "+arg);
        }
    }
     
    // "main" de démonstration
    public class Exemple013_ObservableEtObserver {
     
        public static void main(String[] args) {
            ClasseA maClasseA = new ClasseA();
            ClasseB observateur1 = new ClasseB("Observateur1 (ClasseB)");
            ClasseB observateur2 = new ClasseB("Observateur2 (ClasseB)");
            maClasseA.addObserver(observateur1);
            maClasseA.addObserver(observateur2);
            for &#40;int i=0; i<3; i++&#41; &#123;
                System.out.println&#40;"**"&#41;;
                maClasseA.incrementeCompteurDe&#40;1&#41;;
                try &#123;Thread.sleep&#40;1000&#41;;&#125; catch &#40;Exception e&#41; &#123;e.printStackTrace&#40;&#41;;&#125;
            &#125;
        &#125;   
    &#125;
    (3) PropertyChangeListener, qui détecte les modifications d'un objet.
    Tutoriel : http://java.sun.com/docs/books/tutor...elistener.html

    Exemple :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    //par Nicolas_75
    import java.beans.*;
     
    // classe à observer
    class ClasseAA &#123;
     
        private int compteur = 0;
     
        public int getCompteur&#40;&#41; &#123;
            return compteur;
        &#125;
     
        public void incrementeCompteurDe&#40;int i&#41; &#123;
            int oldValue = compteur;
            compteur += i;
            System.out.println&#40;"L'instance de classeA a son compteur qui passe à "+compteur+" ; elle notifie les observateurs."&#41;;
            propertyChangeSupport.firePropertyChange&#40;"compteur", oldValue, compteur&#41;;
        &#125;
     
        private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport&#40;this&#41;;
     
        public void addPropertyChangeListener&#40;PropertyChangeListener listener&#41; &#123;
            propertyChangeSupport.addPropertyChangeListener&#40;listener&#41;;
        &#125;
     
        public void removePropertyChangeListener&#40;PropertyChangeListener listener&#41; &#123;
            propertyChangeSupport.removePropertyChangeListener&#40;listener&#41;;
        &#125;
    &#125;
     
    class ClasseBB &#123;
     
        private String nomInstance = "";
     
        public ClasseBB&#40;String s, ClasseAA classeAobservee&#41; &#123;
            nomInstance = s;
            classeAobservee.addPropertyChangeListener&#40;new PropertyChangeListener&#40;&#41; &#123;
                public void propertyChange&#40;PropertyChangeEvent pce&#41; &#123;
                    System.out.println&#40;nomInstance+" a été averti d'un changement dans l'objet qu'il observe, et dont le compteur est passé de "+pce.getOldValue&#40;&#41;+" à "+pce.getNewValue&#40;&#41;&#41;;
                &#125;
            &#125;
            &#41;;
        &#125;
    &#125;
     
    // "main" de démonstration
    public class Exemple014_BeansChangePropertyListener &#123;
     
         public static void main&#40;String&#91;&#93; args&#41; &#123;
            ClasseAA maClasseA = new ClasseAA&#40;&#41;;
            ClasseBB observateur1 = new ClasseBB&#40;"Observateur1 &#40;ClasseB&#41;", maClasseA&#41;;
            ClasseBB observateur2 = new ClasseBB&#40;"Observateur2 &#40;ClasseB&#41;", maClasseA&#41;;
            for &#40;int i=0; i<3; i++&#41; &#123;
                System.out.println&#40;"**"&#41;;
                maClasseA.incrementeCompteurDe&#40;1&#41;;
                try &#123;Thread.sleep&#40;1000&#41;;&#125; catch &#40;Exception e&#41; &#123;e.printStackTrace&#40;&#41;;&#125;
            &#125;
        &#125;
    &#125;
    Nicolas

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    ta 2 eme methode me parait tres interessant mais en fait j ai un probleme car ma 1 ere classe est deja etendue d une autre classe hors en java on ne peux heriter de 2 classe

    Peut t on contourner ce dileme

    et je te remercie de ta reponse tres elaboree

  4. #4
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    Mon principal probleme est que le setChanged est protected donc meme si je fais par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      Observable o = new Observable&#40;&#41;;
               o.setChanger&#40;&#41;;
    sa ne va evidement pas marcher .

    Voyervous une autre methode pour acceder a cette methode ....

  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
    Comme dans l'exemple proposé par Nicolas, il te faut étendre la classe Observable pour accéder alors à la méthode setChanged().
    Tu ne peux pas faire grand chose avec un Observable non étendu, il faut bien que tu gères des propriétés et/ou comportements propres à ta classe, non ?

  6. #6
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    oui je suis tout a fait d accord

    en faitle truc cest que moi ma classe AA est deja etendu d une JFrame donc je ne peut plus l etendre a Observable voila pourquoi je cherche un moyen de contourner ce probleme d heritage

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Pourquoi ne pas créer ton propre Listener :

    FAQ : Comment créer son propre Listener ?

    a++

  8. #8
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    ouai j ai consulter ta faq mais je trouve sa assez delicat pour l adapter a un changement d un boolean

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    429
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 429
    Points : 475
    Points
    475
    Par défaut
    Bonjour,

    Est-ce que tu n'essaies pas de sortir l'artillerie lourde pour rien ?
    Ce booléen est bien modifié par une méthode, du type setBoolean, ou changeFlag, ... ?
    Dans ce cas, tu peux lancer les actions que te souhaites à partir de là.
    Les méthodes (2) ou (3) sont surtout utiles si tu veux rajouter dynamiquement des observateurs. Es-tu vraiment dans ce cas ?

    Nicolas

  10. #10
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Points : 100
    Points
    100
    Par défaut
    ta tout a fait raison

    merci

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

Discussions similaires

  1. Listener sur JTable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 05/02/2009, 17h27
  2. [Language]question sur public et extend
    Par harris_macken dans le forum Langage
    Réponses: 5
    Dernier message: 30/03/2005, 08h14
  3. [LISTENER] sur l'insertion de cd
    Par divxdede dans le forum Multimédia
    Réponses: 2
    Dernier message: 03/07/2004, 12h28
  4. [JSlider] listener sur Jslider
    Par Garion dans le forum Composants
    Réponses: 4
    Dernier message: 31/05/2004, 14h33
  5. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 14h14

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