在我的 View 类中,我有多个自定义面板类(扩展 JPanel)作为嵌套类,它们在发生更改时相互通信。我想让这些面板成为单独的类,每个类都在自己的文件中以提高可读性。但这样这些面板就不能直接调用彼此的方法。我应该为每个面板提供对其他面板的引用,还是查看类?所有这一切似乎都不是一个好主意,而且一切都是紧密耦合的。解决这个问题的最佳解决方案或好的设计是什么?添加属性监听器或使用观察者模式是正确的方法吗?
最佳答案
了解观察者模式。
简而言之,如果 JPanel“A”在 JPanel“B”中完成更改时必须刷新,则
JPanel“B”必须实现Subject接口(interface)
- 由于 JPanel“B”正在实现Subject 接口(interface),因此它必须实现三个方法。
- 附加方法,用于注册希望在有更新时收到通知的对象(观察者)。
- 这只是将一个对象添加到 ArrayList
- 注销对象(观察者)的分离方法
- 这只是从 Arraylist 中删除此类对象
- Notify 方法会考虑 ArrayList 中的所有对象并调用 update 方法
JPanel“A”必须实现观察者接口(interface)
- 由于 JPanel“A”实现了 Observer 接口(interface),因此它必须实现一个方法:
- 当主题的通知方法被调用时,更新方法将被主题调用。
- 您的更新方法应该告诉 JPanel“A”要做什么。例如,它可以检查 JPanel“B”中的值
- 当主题的通知方法被调用时,更新方法将被主题调用。
交互示例
- JPanel“A”在 JPanel“B”中注册。
- JPanel“B”中的属性发生更改,该属性会触发方法notify(),通知所有观察者(在本例中为JPanel“A”)发生了更改。
- 这意味着 JPanel“B”调用所有注册观察者的 update() 方法。
- JPanel“A”执行了 update() 方法,这使得 JPanel“A”检查 JPanel“B”中的属性并进行相应更新。
请告诉我这个解释对您来说是否有意义。
关于java - 多个 JPanel 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642251/