В моем интерфейсе два поля, представляющих минимальное и максимальное значения диапазона.Эти поля связаны с двумя 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());
}
});
Это работает, но мне кажется слишком сложным.Поэтому я попробовал другие подходы, но ни один из них не сработал.
1-я попытка
positionFrom.bind(Bindings.min(positionFrom.get(), positionTo));
positionTo.bind(Bindings.max(positionTo.get(), positionFrom));
Дает StackOverflowError, потому что два свойства продолжают обновлять друг друга.
2-я попытка
positionTo.bind(Bindings.when(positionTo.lessThan(positionFrom)).then(positionFrom.intValue()).otherwise(positionTo.intValue()));
Дает StackOverflowError.
Есть ли более короткое решение, которое я пропустил?