如何在JavaFX中绑定到常量?

时间:2016-10-12 17:46:05

标签: java javafx

如何在JavaFX中绑定到常量?

我找到了像

这样的方式
myObject.myIntegerProperty().bind(new IntegerBinding() {
   @Override
   protected int computeValue() {
      return 2;
   }
});

但看起来太过分了。

有短路吗?

2 个答案:

答案 0 :(得分:1)

作为James_D pointed out:不需要创建与常量的绑定,只需使用给定值初始化属性即可。不过,我建议使用ReadOnlyIntegerProperty来确保该属性未在其他地方修改:

public final class MyClass {

    private final ReadOnlyIntegerWrapper myInteger = new ReadOnlyIntegerWrapper(2);

    public int getMyInteger() {
        return myInteger.get();
    }

    public ReadOnlyIntegerProperty myIntegerProperty() {
        return myInteger.getReadOnlyProperty();
    }

}

请注意,该课程应为final according to Jonathan Giles

  

杰夫弗里森有一篇关于read-only properties in JavaFX的文章。这篇文章缺乏一点清晰度,所以我有点保持沉默。最大的问题是这些方法不是最终的(尽管课程是,但我担心人们不会注意到这一点)。如果子类试图覆盖getter / setter方法并包含逻辑(因为那时有两个代码路径 - 通过setter设置和通过属性方法设置 - 并且它们不重叠,导致不是最终的方法提供了一个巨大的问题运行时的意外行为。标准规则适用 - 在创建getter / setter / property方法时,始终将它们设为最终。

答案 1 :(得分:0)

另一个选择可能是

Bindings.createIntegerBinding(() -> 2)

这将创建一个IntegerBinding,并在需要时立即求值为2。

它根本不会失效(因为没有给出依赖项),因此它将永远保持在该值。