相互依赖的属性

时间:2018-09-10 20:40:48

标签: javafx properties

我的界面中有两个字段,分别代表一个范围的最小值和最大值。这些字段绑定到两个IntegerProperty。 如果最小值属性大于最大值属性,则最大值应设置为最小值,反之亦然。我已经使用两个ChangeListener对此进行了归档。

IntegerProperty positionFrom = new SimpleIntegerProperty(1);
IntegerProperty positionTo = new SimpleIntegerProperty(Integer.MAX_VALUE);

positionFrom.addListener((e, oldPosition, newPosition) -> {
  if (newPosition.intValue() > positionTo.get()) {
    positionTo.set(newPosition.intValue());
  }
});

positionTo.addListener((e, oldPosition, newPosition) -> {
  if (newPosition.intValue() < positionFrom.get()) {
    positionFrom.set(newPosition.intValue());
  }
});

这有效,但对我来说似乎过于复杂。所以我尝试了其他方法,但没有一个起作用。


第一次尝试

positionFrom.bind(Bindings.min(positionFrom.get(), positionTo));
positionTo.bind(Bindings.max(positionTo.get(), positionFrom));

给出StackOverflowError,因为这两个属性不断更新。


第二次尝试

positionTo.bind(Bindings.when(positionTo.lessThan(positionFrom)).then(positionFrom.intValue()).otherwise(positionTo.intValue()));

给出StackOverflowError。


我错过了一个更短的解决方案吗?

0 个答案:

没有答案