【问题标题】:Comunication between multiple JPanels多个 JPanel 之间的通信
【发布时间】:2018-08-01 21:05:28
【问题描述】:

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

【问题讨论】:

标签: java


【解决方案1】:

了解观察者模式。

简而言之,如果JPanel“A”在JPanel“B”中完成更改时必须刷新,那么

JPanel "B" 必须实现 Subject 接口

  • 由于 JPanel "B" 正在实现 Subject 接口,它必须实现三个方法。
  • attach 方法注册希望在有更新时得到通知的对象(观察者)。
    • 这只是将对象添加到 ArrayList
  • 未注册对象的分离方法(观察者)
    • 这只是从 Arraylist 中删除此类对象
  • Notify 方法考虑 ArrayList 中的所有对象并调用更新方法

JPanel "A" 必须实现 Observer 接口

  • 由于 JPanel "A" 实现了 Observer 接口,它必须实现一种方法:
    • 当调用它的 notify 方法时,Subject 将调用 update 方法。
      • 您的更新方法应该告诉JPanel“A”做什么。例如,它可以检查 JPanel "B" 中的值

交互示例

  • JPanel“A”在JPanel“B”中注册。
  • JPanel "B" 中的一个属性发生了变化,它触发了 notify() 方法,该方法通知所有观察者(在本例中为 JPanel "A")发生了变化。
  • 这意味着 JPanel“B”调用所有已注册观察者的 update() 方法。
  • JPanel "A" 执行了 update() 方法,使 JPanel "A" 检查 JPanel "B" 中的属性并进行相应更新。

如果这个解释对你有意义,请告诉我。

【讨论】:

    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    相关资源
    最近更新 更多