让我们考虑三个JavaFX属性:A B C。
现在让我们将它们双向绑定到一个三角形(A-B,B-C,A-C)。
现在让我们想象一下我们修改了A的值。
这会导致问题(例如无限递归)吗?
JavaFX可以处理这种循环绑定图吗?如果是的话,它是如何做到的?
感谢阅读。
答案 0 :(得分:6)
试试吧......
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.SimpleIntegerProperty;
public class CyclicPropertyTest {
public static void main(String[] args) {
IntegerProperty x = new SimpleIntegerProperty(0);
IntegerProperty y = new SimpleIntegerProperty(1);
IntegerProperty z = new SimpleIntegerProperty(2);
x.addListener((obs, oldValue, newValue) -> System.out.printf("x changed from %d to %d %n", oldValue, newValue));
y.addListener((obs, oldValue, newValue) -> System.out.printf("y changed from %d to %d %n", oldValue, newValue));
z.addListener((obs, oldValue, newValue) -> System.out.printf("z changed from %d to %d %n", oldValue, newValue));
x.bindBidirectional(y);
y.bindBidirectional(z);
z.bindBidirectional(x);
x.set(1);
}
}
只有在属性值发生更改时才会通知侦听器。当x设置为1时,这会导致y设置为1,这会导致z设置为1.这会激活侦听器。由于z已经改变,这导致(至少在概念上)x被设置为1,但由于它已经是1,因此没有通知监听器,因此循环终止。