java - SWT:使用附加的 ModifyListeners 同步更新字段的文本

标签 java design-patterns swt stack-overflow event-listener

欢迎提出更好的标题建议!

有两个字段(净价和毛价),两者都是可编辑的。 它们附加了自己的 ModifyListeners,根据适用增值税的百分比更新其他文本的值。

The dialog 这就是理论。

实际情况是,当任何一个监听器设置另一个 Text 的文本属性时,另一个监听器会触发,这会触发调用者 Text 的监听器,依此类推,直到它到达 StackOverflow。 :-)

问题:是否有众所周知的方式/模式来避免这种行为?

我只能想到对话框类中的一个字段让我们说:

boolean stopOverflow; // Stops Listeners from triggering each other

并让听众检查它;无论我们是否已经在修改事件中,都将其设置为 true/false。希望 SWT 是单线程的。

可以在这里找到类似的问题:

How to limit ModifyListener for user interaction only

最佳答案

在执行 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/

相关文章:

java - 使用父类(super class)创建构建器时,父类不能返回子类的实例

design-patterns - 什么是具有出色设计的小型开源项目?

java - SWT Eclipse 组合事件

java - Couchbase View 结果与 JAVA 和 REST 不同

java - Log4j 是一个死项目吗?

java - Jaxb和内部元素的命名空间

java - SFTP JSch 库是否可以上传多部分文件?

java - 一致 UI 的设计模式

java - 网格布局和对话框 : How to align items correctly

java - 当我更改 SWT 中按钮的文本时,整个按钮的大小会发生变化。我怎样才能禁用这个功能?