多个JPanel之间的通信

时间:2018-08-01 21:05:29

标签: java

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

1 个答案:

答案 0 :(得分:1)

了解“观察者”模式。

enter image description here

简而言之,如果在JPanel“ B”中进行更改时,JPanel“ A”必须刷新,则

JPanel“ B”必须实现Subject接口

  • 由于JPanel“ B”正在实现Subject接口,因此它必须实现三种方法。
  • 附着方法,用于注册希望在更新时被通知的对象(观察者)。
    • 这只是将对象添加到ArrayList
  • 取消注册对象(观察者)的分离方法
    • 这只是从Arraylist中删除此类对象
  • Notify方法,该方法考虑了ArrayList中的所有对象并调用了update方法

JPanel“ A”必须实现观察者接口

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

互动示例

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

让我知道这个解释对您是否有意义。