Взаимозависимые свойства - PullRequest
       5

Взаимозависимые свойства

0 голосов
/ 10 сентября 2018

В моем интерфейсе два поля, представляющих минимальное и максимальное значения диапазона.Эти поля связаны с двумя 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.


Есть ли более короткое решение, которое я пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...