我正在构建一个包含 GUI 和模型的应用程序。当模型中的字段发生更改时,我正在使用观察者模式(使用 java 的内置接口(interface))来更新 GUI。
这通常工作正常,但我有一种情况,模型中的特定 String 变量(特别是文件的 url)可以通过两个单独的 JTextFields(swing)更改,其内容实际上反射(reflect)了有问题的模型变量。
我遇到的问题是这些 JTextField 之一的更改需要引起对模型状态和另一个 JTextField 的内容的更新。我的模型确保仅在模型状态发生变化时才向观察者发送通知。但是,修改 JTextFields 的过程涉及清空其文本内容然后将其重置。
无需赘述太多细节,其结果是更新/通知过程陷入无限循环。我通过为这个特定问题搁置观察者模式暂时解决了这个问题,但我想知道是否有人可以建议一种巧妙的方法来确保特定组件不会被源自同一组件的更改“更新”。
感谢任何帮助。
最佳答案
如 Java SE Application Design With MVC 中所述, 这是几个 Issues With Application Design 之一.建议的方法依赖于 PropertyChangeListener
,如图所示 here . PropertyChangeEvent
包括旧值和新值以供引用。
关于java - 使用 OO 观察者模式而不更新从中发起更改的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14623897/