Supposons que j'ai une classe d'entité Foo qui contient des champs, des getters, des setters et des constructeurs. Par exemple:Est-il possible de faire une propriété qui écoute les changements d'objets personnalisés dans javafx?
public class Foo {
private Integer a = 0;
private Integer b = 0;
public Foo() {
}
public Integer getA() {
return a;
}
public void setA(Integer a) {
this.a = a;
}
public Integer getB() {
return b;
}
public void setB(Integer b) {
this.b = b;
}
}
Ensuite, je veux savoir quand a ou b change. Je sais qu'il existe une ObjectProperty dans javaFX. Je suis donc la création d'objets de la propriété:
ObjectProperty<Foo> fooProperty = new SimpleObjectProperty<>(new Foo());
Ensuite, afin de connaître les changements de champs a et b, ajouter ChangeListener:
fooProperty.addListener((observable, oldValue, newValue) -> {
System.out.println("Property changed!");
});
Puis expériences:
fooProperty.set(new Foo());
travail bien, mais la ligne suivante:
fooProperty.get().setA(10)
n'invoque pas l'écouteur. La raison en est claire. La dernière ligne ne change pas réellement l'objet Foo (la référence reste la même).
J'ai quelques solutions possibles. Mais tous ne sont pas assez élégants. Par exemple, changer chaque champ en tant que propriété et ajouter le même écouteur pour chaque variable.
Donc, la question est. Quel est le moyen d'ajouter un écouteur pour les changements de champs de l'objet personnalisé?
N'est-ce pas simplement résolu en implémentant 'a' et' b' comme 'IntegerProperty's et en utilisant une instance' Foo' fixe? Ou ai-je mal compris la question? –