欢迎提出更好的标题建议!
有两个字段(净价和毛价),两者都是可编辑的。 它们附加了自己的 ModifyListeners,根据适用增值税的百分比更新其他文本的值。
这就是理论。
实际情况是,当任何一个监听器设置另一个 Text 的文本属性时,另一个监听器会触发,这会触发调用者 Text 的监听器,依此类推,直到它到达 StackOverflow。 :-)
问题:是否有众所周知的方式/模式来避免这种行为?
我只能想到对话框类中的一个字段让我们说:
boolean stopOverflow; // Stops Listeners from triggering each other
并让听众检查它;无论我们是否已经在修改事件中,都将其设置为 true/false。希望 SWT 是单线程的。
可以在这里找到类似的问题:
最佳答案
在执行 setText
之前调用 removeModifyListener
然后在之后调用 addModifyListener
是解决此问题的常用方法之一。
将修改监听器保留为对话框类中的一个字段,以便您可以跟踪它:
private ModifyListener modifyListener = new MyModifyListener();
...
text.removeModifyListener(modifyListener);
text.setText(....);
text.addModifyListener(modifyListener).
关于java - SWT:使用附加的 ModifyListeners 同步更新字段的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26218249/