当前位置: 首页 > 知识库问答 >
问题:

JavaFX如何处理循环属性绑定?

郝冥夜
2023-03-14
        private final BooleanProperty a = new SimpleBooleanProperty(false);
        private final BooleanProperty b = new SimpleBooleanProperty(false);
        private final BooleanProperty c = new SimpleBooleanProperty(false);
        private final BooleanProperty d = new SimpleBooleanProperty(false);

        a.bind(c);
        c.bind(d.or(a));

我首先想到的是,一个property_a不能绑定到另一个property_b,这个property_b绑定到property_a或者依赖于属性,这些属性绑定到property_a。对吧?

共有1个答案

白志勇
2023-03-14

JavaFX并不阻止这种依赖关系。
依赖关系中不能有循环,在这种情况下是允许的。分析依赖关系是不可能的,因为bindObservableValue作为参数,而不管实现是什么,而且实现的内部隐藏在“接口后面”,所以不可能从ObservableValue中获得依赖关系。
因此要由程序员来确保没有创建循环依赖关系。

修改D只会导致StackOverflowError

如果分析“依赖”关系(传递闭包需要是非自反的),则可以识别这种问题,但需要将有关依赖关系的信息存储在自定义数据结构中(或在编译前“手工”分析)。

在您的例子中,在a.bind(c)之后

图将包含一条边:

a -> c

在执行c.bind(d.或(a))之前,您需要在节点da中搜索与c的依赖关系,因为您希望添加以下边:

c -> d
c -> a
 类似资料:
  • 我现在正在使用JavaFX,我正在跟随一个教程来学习Java的这一部分。不过,我有一个关于属性的问题: 如何正确处理JavaFX中的派生属性? 让我以一个例子来澄清。假设您有一个具有简单属性的模型: null 但是,表视图不接受整数,而只接受可观察的整数。如果有人更改用户的生日,我希望表自动更改。 我可以在中创建,但我不认为这是一个解决方案。我还可以在类中创建一个名为的,但我听起来不太对,因为ag

  • 众所周知,不能将foreach循环中的集合修改为。但是foreach循环如何签出任何更改?我的意思是,如果我有密码: …它仍然会抛出异常。IEnumerator接口中没有集合的任何版本控制。这是怎么回事?我之所以要求这样做,是因为在java中,您可以在循环期间轻松地修改集合,这是我自己的HashCollection实现中的问题,我不知道如何检查任何集合更改。

  • 问题内容: 我有一个带有文本字段和按钮的简单fxml。如果文本字段为空,我想禁用按钮。所以我在控制器中插入如下内容: ..那很好。问题是当我添加第二个文本字段时,如果其中一个文本字段为空,希望禁用我的按钮。那该怎么办?我尝试了以下操作,但这不起作用: 问题答案: 可以通过以下方式绑定到布尔表达式:

  • 我有一个带有文本字段和按钮的简单fxml。如果文本字段为空,我想禁用按钮。所以我在我的控制器中插入如下内容: ..这很好用。问题是,当我添加第二个文本字段时,如果其中一个文本字段为空,我希望禁用我的按钮。那怎么办呢?我尝试了以下方法,但不起作用:

  • 下面是我的父组件,它包含一个循环的多个输入。如何选择一个来聚焦?在这种情况下,我必须创建动态吗?

  • 这里是一个以圆圈为单位的交叉网格,当前为5x5。我试图得到一行5,下面是一行4,然后是3,然后是2等等。我试着改变for循环和值,但什么都不起作用。我需要使用行和列吗? 谢谢!