Mise en œuvre d'un ObservableValue
J'ai cet objet:
public class Oggetto{
private int value;
private boolean valid;
public Oggetto(int value, boolean valid) {
this.value = value;
this.valid = valid;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
}
et j'aimerais mettre en œuvre une Observable de l'objet qui déclenche des événements lorsque quelque chose change
Ici, l'objet observé:
public class OggettoOsservabile implements ObservableValue<Oggetto>{
private Oggetto value;
OggettoOsservabile(int i, boolean b) {
this.value=new Oggetto(i, b);
}
@Override
public void addListener(ChangeListener<? super Oggetto> listener) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void removeListener(ChangeListener<? super Oggetto> listener) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public Oggetto getValue() {
return value;
}
@Override
public void addListener(InvalidationListener listener) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public void removeListener(InvalidationListener listener) {
throw new UnsupportedOperationException("Not supported yet.");
}
}
je ne sais pas comment procéder afin de détecter un changement de la classe "Oggetto" et d'envoyer une notification à l'registeres auditeur.
OggettoOsservabile oggetto = new OggettoOsservabile(1, false);
oggetto.addListener(new ChangeListener<Oggetto>() {
public void changed(ObservableValue<? extends Oggetto> observable, Oggetto oldValue, Oggetto newValue) {
System.out.println("changed " + oldValue + "->" + newValue);
}
});
OriginalL'auteur user3640448 | 2014-10-11
Vous devez vous connecter pour publier un commentaire.
Mettre en œuvre votre
Oggetto
classe à l'aide de la norme JavaFX Propriétés:Ce peut être tout ce dont vous avez besoin, vous pouvez simplement observer les propriétés individuelles. Mais si vous voulez une classe qui informe l'invalidation des auditeurs si l'une des modifications de la propriété, vous pouvez étendre
ObjectBinding
:L'API est un peu trop fine à mon goût. Mais
Observable
est juste quelque chose qui informe les auditeurs lorsqu'il n'est pas valide.ObservableValue
en outre encapsule une valeur (il a ungetValue()
la méthode et peut notifierChangeListener
s lorsque la valeur change réellement.Quand je fais cela, je reçois un avertissement que
ObjectBinding
doit avoir un paramètre de type. Il devrait en être deextends ObjectBinding<Oggetto>
?OriginalL'auteur James_D