Si vous voulez juste effectuer des opérations arithmétiques simples sur la valeur, vous pouvez utiliser l'API de liaison, qui prend en charge un ensemble assez riche de fonctions arithmétiques:
p1.bind(p2.multiply(p2).add(1));
fera en sorte que p1
est toujours égale à p2*p2+1
(comme un exemple arbitraire), et
p1.bind(Bindings
.when(p2.lessThan(0))
.then(0)
.otherwise(p2));
veillera à ce que p1
est toujours égale à p2
quand p2
est non-négatif et p1
est nul autrement.
Si cela ne suffit pas à vos besoins, vous pouvez utiliser un exemple de liaison personnalisé:
p1.bind(Bindings.createDoubleBinding(() -> {
double p2Value = p2.getValue();
double interceptedValue = ... ;
return interceptedValue ;
}, p2);
Le dernier argument est un varargs de Observable
, de sorte que vous pouvez lister toutes les propriétés (ou d'autres observables) là que vous voulez déclencher une invalidation de la liaison.
Une façon équivalente est de sous-classe DoubleBinding
:
p1.bind(new DoubleBinding() {
{
bind(p2); // and to other properties if needed...
}
@Override
protected double computeValue() {
double p2Value = p2.getValue();
double interceptedValue = ... ;
return interceptedValue ;
}
});
Modifier comment? Il existe différentes façons de créer des liaisons personnalisées, si vous en avez besoin, mais je ne suis pas sûr que ce soit ce que vous recherchez. –