java - 多个 JPanel 之间的通信

标签 java

在我的 View 类中,我有多个自定义面板类(扩展 JPanel)作为嵌套类,它们在发生更改时相互通信。我想让这些面板成为单独的类,每个类都在自己的文件中以提高可读性。但这样这些面板就不能直接调用彼此的方法。我应该为每个面板提供对其他面板的引用,还是查看类?所有这一切似乎都不是一个好主意,而且一切都是紧密耦合的。解决这个问题的最佳解决方案或好的设计是什么?添加属性监听器或使用观察者模式是正确的方法吗?

最佳答案

了解观察者模式。

enter image description here

简而言之,如果 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/

相关文章:

java - 将使用 ant 构建的 Java eclipse 项目迁移到 Gradle

java - Spring Security无法访问/resources下的文件

java - 封装并将原语传递给方法

java - elasticsearch - 聚合和过滤器的问题

java - 在 bean 构建中使用 Spring @Value

java - Spring Webflow - spring-context.xml 文件错误

java - 在 Matlab 中捕获 Java 异常

java - 按绝对大小对(一串) double 排序

Java 即时字符串替换

java - 对 api 的异常处理和错误响应