У меня сложный вопрос, на который, вероятно, есть простой ответ (надеюсь).
Я использую 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.
Как я могу это сделать?