在“耦合”JSliders中避免不必要的事件和无限循环?

我有一个GUI,它根据滑块值向Web服务器发出命令。 其中一些滑块在Web服务器上“耦合”,因此更改其中一个滑块也可能会改变另一个滑块。 通过Web服务器返回基于发出的命令设置的值列表来完成耦合。

因此,我可以根据此响应轻松设置相应的滑块,但问题是这样做会导致触发ChangeListener,然后再次向Web服务器发出命令。 理想情况下,“耦合”应该表现良好并避免无限循环,但这是一个潜在的问题,发送所有这些额外的事件似乎是不必要的。

我能想到的两个解决方案是:

  1. 暂时删除侦听器,更改值,然后将它们放回原处。
  2. 添加“手动”标志,让听众知道它应该忽略更改。

这些似乎都不是我理想的解决方案,但其中一个比另一个“更好”? 还是有第三个我不考虑的解决方案?

向侦听器添加enabled标志,并在手动设置值之前禁用它们

我不会添加和删除侦听器,因为它只会触发更多的侦听器!

一位作者将此问题称为颤动 。 除了@Pyrolistical提出的标志方法之外,本讨论还提出了一个共享模型。

.Net WPF中使用的标准模型是仅在属性值发生变化时触发事件! 在你的情况下,它是setValue()方法。