JGoodies Binding + ограничения: как этого добиться?

У меня сложный вопрос, на который, вероятно, есть простой ответ (надеюсь).

Я использую JGoodies Binding для привязки ползунка к ValueModel; работает отлично.

Предположим, у меня есть следующая (надуманная) ситуация, когда я хочу смоделировать покупку шоколада и карамели, и у меня есть 1 доллар со следующими индикаторами пользовательского интерфейса.

  • C1 = ползунок «карамель» = бюджет на карамельные конфеты = от 0 до 50 центов.
  • C2 = ползунок «шоколад» = бюджет шоколадных конфет = от 0 до 50 центов.
  • C3 = ползунок «изменить» = остаток остался

Я хочу принудительно установить ограничение C1+C2+C3 = 100, чтобы:

  • если я регулирую C1 вверх/вниз на x, C3 настраивается на -x
  • если я регулирую C2 вверх/вниз на x, C3 настраивается на -x
  • если я настраиваю C3 вверх/вниз на x, C1 настраивается на y=-floor(x/2), а C2 настраивается на -x-y

(чтобы сумма корректировок была ровно 0 во всех случаях)

Очевидный подход состоит в том, чтобы добавить слушателя к каждой ValueModel для выполнения заданных действий в каждом случае. Но тогда я должен беспокоиться о двух вещах:

  • цикличность (изменения в C1 вызывают изменения в C3, которые затем изменяют C1)
  • синхронизация: я хочу иметь средство доступа к полному набору (C1, C2, C3), чтобы сумма трех чисел составляла 100.

Как я могу это сделать?


person Jason S    schedule 05.01.2012    source источник
comment
Вы можете реализовать BoundedRangeModel для производного от JSlider   -  person mKorbel    schedule 06.01.2012
comment
да, я использую JGoodies BoundedRangeAdapter на ValueModel   -  person Jason S    schedule 06.01.2012
comment
Я думаю, что Hovercraft Full Of Eels и camickr разместили здесь stackoverflow.com/ вопросов/7617605/ очень хороший код для вашего вдохновения   -  person mKorbel    schedule 06.01.2012