我的界面中有两个字段,分别代表一个范围的最小值和最大值。这些字段绑定到两个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。
我错过了一个更短的解决方案吗?