基本上,我看到绑定(bind)方法用于相对于 Pane 尺寸的变化来调整节点尺寸。 另外,我有时看到 Java 中的 addListener 方法以类似的方式使用。 所以我不明白在 JavaFX 的情况下什么时候应该选择其中一种?
最佳答案
您可以将更改监听器添加到 ObservableValue
为了在值发生变化时执行任意操作:
IntegerProperty value = new SimpleIntegerProperty(42);
value.addListener((obs, oldValue, newValue) ->
System.out.println("Value changed from "+oldValue+" to "+newValue));
一个常见的要求是当另一个属性发生更改时自动更改一个属性的值。对于这种常见但特定的要求,您可以使用绑定(bind)。有时绑定(bind)比监听器更容易编写代码:
IntegerProperty valueTimesTwo = new SimpleIntegerProperty();
valueTimesTwo.bind(value.multiply(2));
在其他情况下,这实际上只是您发现更清晰的选择:
DoubleProperty logValuePlusOne = new SimpleDoubleProperty();
logValuePlusOne.bind(Bindings.createDoubleBinding(
() -> Math.log(value.get()+1),
value);
// or:
value.addListener((obs, oldValue, newValue) ->
logValue.set(Math.log(newValue.intValue()+1)));
上述绑定(bind)版本的一个优点是删除绑定(bind)更容易一些:
logValuePlusOne.unbind();
关于javafx - 有人可以指导我何时在 JavaFX(Java 8) 中使用 addListener 上的绑定(bind)方法吗?我发现两者非常相似,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379055/