Как избежать ненужных событий и бесконечного цикла в «связанных» JSliders? - PullRequest
4 голосов
/ 14 апреля 2010

У меня есть графический интерфейс, который выдает команды веб-серверу на основе значений ползунка. Некоторые из этих ползунков «связаны» на веб-сервере, поэтому изменение одного из них может также изменить другой. Связывание выполняется веб-сервером, возвращающим список значений, которые были установлены на основе введенной команды.

Таким образом, я могу легко установить соответствующие ползунки на основе этого ответа, но проблема заключается в том, что выполнение этого вызывает запуск ChangeListener, а затем снова выдается команда на веб-сервер. В идеале «связывание» должно быть хорошим и избегать бесконечных циклов, но это является потенциальной проблемой, и отправка всех этих дополнительных событий кажется ненужной.

Два решения, о которых я мог подумать, были:

  1. Временное удаление слушателей, изменение значения и их последующее возвращение.
  2. Добавьте флаг "manual", чтобы слушатель знал, что он должен игнорировать изменение.

Ни один из них не кажется мне идеальным решением, но один из них "лучше", чем другой? Или есть третье решение, которое я не рассматриваю?

Ответы [ 3 ]

3 голосов
/ 14 апреля 2010

Один автор называет эту проблему фибрилляцией . В этом обсуждении предлагается общая модель, в дополнение к подходу с использованием флагов, предложенному @ Pyrolistical.

3 голосов
/ 14 апреля 2010

добавьте флаг enabled к слушателям и отключите их, прежде чем вручную установить значение

Я бы не стал добавлять и удалять слушателей, так как это вызывает больше слушателей!

0 голосов
/ 08 сентября 2010

Стандартная модель, используемая в .Net WPF, должна вызывать событие, только если значение свойства изменилось! В вашем случае это setValue() метод.

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