Question

J'ai développé un propre Javabean pour Swing. Maintenant, je suis en train d'attraper deux propriétés sur le changement, en utilisant un PropertyChangeListener.

Le problème est que le PropertyChangeSupport pour un de mes propriétés dans le JavaBean fonctionne très bien, mais il ne semble pas tirer tout propertyChange pour les autres biens déclarés.

Permettez-moi de vous donner quelques extraits de mon code:

JCalendar Bean:

public class JCalendar extends JPanel {  
  private int startDay, endDay;  
  private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);  

  public int getStartDay() {
    return startDay;
  }

  public void setStartDay(int startDay) {
    int old = this.startDay;  
    this.startDay = startDay;  
    this.pcs.firePropertyChange("startDay", old, startDay);
  }

  public int getEndDay() {
    return endDay;
  }

  public void setEndDay(int endDay) {
    int old = this.endDay;
    this.endDay = endDay;
    this.pcs.firePropertyChange("endDay", old, endDay);
  }
}

Bien sûr, il est un peu plus de code dans la classe Bean, mais je l'ai coupé afin de le garder clair. J'essaie d'attraper ces propertyChanges avec un PropertyChangeListener dans une autre classe comme ceci:

class markedDayListener implements PropertyChangeListener {

  public void propertyChange(PropertyChangeEvent arg0) {

   System.out.println(arg0.getPropertyName());

   if(arg0.getPropertyName().equals("startDay")) {
      // Do something
   } else if(arg0.getPropertyName().equals("endDay")) {
      // Do something
   }
  }
 }

Jusqu'à présent tout semble correct pour moi. Mais pour une raison quelconque le PropertyChangeSupport se déclenche seulement lorsque propertyChange StartDay est modifié. Dès que je change EndDay, la méthode setEndDay est appelée, mais il ne semble pas propertyChange être tiré. Je suis connecté avec tous les événements simples System.out.println () s afin de voir, quelles méthodes sont appelées et a découvert ce qui suit:

  • Le PropertyChangeListener est ajouté correctement et fonctionne quand StartDay change
  • le setStartDay () et setEndDay () - méthodes sont appelées correctement
  • quand setEndDay () est appelée, pas PropertyChangeEvent avec le propertySource "EndDay" est réglé

J'ai essayé cela pendant quelques heures maintenant et ne vois pas ce qui ne va pas. Espérons que quelqu'un ici peut me aider.

Était-ce utile?

La solution

Si tout ce que vous dites est juste la seule explication est que vous définissez la même valeur pour EndDay à nouveau, donc aucun événement est déclenché ...

Ajoutez quelques traces pour voir si les valeurs de « vieux » et « EndDay » dans la méthode setEndDay ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top