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

API standards et tierces Java Discussion :

[beans] PropertyChangeSupport à t'il un fonctionnement spécial ?


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [beans] PropertyChangeSupport à t'il un fonctionnement spécial ?
    Bonjour,

    J'avait besoin de propager des évènements lorsqu'une propriété d'un bean était modifiée, j'ai donc étendu la classe 'java.beans.PropertyChangeSupport' et écris les code qui vas avec.
    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
     
    public MaClasse extends PropertyChangeSuport {
      private MonObjet monObjet;
      public MaClasse() {
        super(this);
        monObjet = new MonObjet();
      }
      ...
      public void modifieLeNom(){
        String nom = monObjet.getNom();
        monObjet.setNom("truc");
        firePropertyChange("nom", nom, monObjet.getNom()) ;
      }
      ...
    }
     
    public MaClasseQuiEcoute {
     
      ...
      MaClasse mc = new MaClasse();
      mc.addPropertyChangeListener(new InterenalPropertyChangeListener());
      mc.modifieLeNom();
      ...
     
      private class InternalPropertyChangeListener implments PropertyListener {
        public void propertyChange(PropertyChangeEvent evt){
          System.out.println("Change");
        }
      }
    }
    Mais je n'ai jamais vu apparaitre "Change" dans ma console. Aprés des centaines de cheveux perdus, et minutes passées à débugger j'ai modifie ma tactique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public MaClasse {
      protected final EventListenerList listeners = new EventListenerList();
      ...
      String nom = monObjet.getNom();
      monObjet.setNom("truc");
      firePropertyChange("nom", nom, monObjet.getNom()) ;
      ...
    
      protected void firePropertyChange(....) {
        // le code qui vas bien (récupère les listeners, boucle et appelle la méthode)
      }
    }
    et la, tout fonctionne !

    Y à t'il une particularité de'PropertyChangeSupport' que je n'ai pas saisie et qui pourrais expliquer la chose ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 905
    Billets dans le blog
    54
    Par défaut
    Je pense que tu as pris le probleme par le mauvais bout. Pour ma part mon objet delegue la gestion des listener sur cette proprietes a un PropertyChangeSupport ; ce qui donne un squellette commun similaire a ceci :

    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
    public class MyObject {
     /** This object's property ID.
     */
     public static final String MY_PROPERTY_PROPERTY = "myProperty";
     
     /** This object's property value.
     */
     private Whatever myProperty;
     
     /** Change support delegate.
     */
     private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
     
     /** Getter for myProperty.
     * @return The property's value.
     */
     public Whatever getMyProperty() {  
       return myProperty;
     }
     
     /** Setter for myProperty.
     * @param value The new value.
     */
     public void setMyProperty(Whatever value) {
       Whatever oldValue = myProperty;
       myProperty = value;
       changeSupport.firePropertyChange(MY_PROPERTY_PROPERTY, oldValue, value);
     }
     
     /** Register listener.
     * @param Listener The listener to be added.
     */
     public void addPropertyChangeListener(PropertyChangeListener listener) {
       changeSupport.addPropertyChangeListener(listener);
     }
     
     /** Register listener.
     * @param propertyName The target property
     * @param Listener The listener to be added.
     */
     public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
       changeSupport.addPropertyChangeListener(propertyName, listener);
     }
     
     /** Unregister listener.
     * @param Listener The listener to be removed.
     */
     public void removePropertyChangeListener(PropertyChangeListener listener) {
       changeSupport.removePropertyChangeListener(listener);
     }
     
     /** Unregister listener.
     * @param propertyName The target property
     * @param Listener The listener to be removed.
     */
     public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
       changeSupport.removePropertyChangeListener(propertyName, listener);
     }
    }
    Note : dans le cas de composant Swing, pas la peine de faire tout ca, putClientProperty() et getClientProperty() se chargent a la fois du stockage et des notifications vers les listeners.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Invité
    Invité(e)
    Par défaut
    Pour ma pars je n'aime pas placer une gestion de listener dans mon bean. Le 'PropertyChangeSupport' était dans mon modèle, pas dans mon bean.

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/11/2011, 10h54
  2. [Data] Rechargement de bean ne fonctionne pas selon le contexte
    Par pigalon dans le forum Spring
    Réponses: 0
    Dernier message: 26/04/2011, 10h37
  3. mes method bean ne fonctionne pas
    Par ahmed.normal.tn dans le forum JSF
    Réponses: 5
    Dernier message: 21/04/2008, 09h19
  4. [EJB Stateful] Fonctionnement des EJB Stateful Session Bean
    Par T`lash dans le forum Java EE
    Réponses: 3
    Dernier message: 15/04/2008, 02h10
  5. Application VB6 à fonctionnement un peu spécial
    Par PCBleu dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/09/2006, 15h47

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