binding - JavaFX 可以处理循环属性绑定(bind)图吗?

标签 binding javafx javafx-2 javafx-8

让我们考虑三个 JavaFX 属性:A B C。

现在让我们将它们双向绑定(bind)成一个三角形(A-B、B-C、A-C)。

现在假设我们修改了A的值。

这会导致问题吗(例如无限递归)?

JavaFX 可以处理这样的循环绑定(bind)图吗?如果是,它是如何做到的?

感谢阅读。

最佳答案

试一试...

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,因此不会通知任何监听器,因此循环终止。

关于binding - JavaFX 可以处理循环属性绑定(bind)图吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790892/

相关文章:

java - 单击时取消选择 javafx ListView 上的项目

java - Canvas 画不出流畅的线条

java - 除了javafx中的小动画时间线,还有什么解决办法吗?

css - JavaFx 以编程方式设置外部背景图像

wpf - 当子 TextBox 聚焦时设置 ListBoxItem.IsSelected

c# - 使用 MVVM 限制 WPF 中绑定(bind)到 DataGrid 的属性

java - 字符串属性绑定(bind)到二进制属性

java - 为呈现为 SimpleObjectProperty<ImageView> 的 JavaFX TableView 列定义自定义比较器

c# - XAML - 为什么数据绑定(bind) TwoWay 不适用于 .net 4.0 中组合框的文本属性?

java - 部署 JavaFX 应用程序、创建 JAR 和独立应用程序以及 native 安装程序的最佳方式是什么