如何在Java Swing中的两个不同的MVC控制器之间正确通信



你能解释一下控制器如何以简单但仍然正确的方式调用另一个控制器方法吗?

请提供一些代码!

背景:我有 2 个不同的控制器视图模型和 2 个库,它们需要相互通信:

    设置窗口/设置
  1. 控制器/设置模型:负责应用程序设置。该模型是单例,因为我需要整个应用程序的设置数据;

  2. 用于监视目录的库,每次在特定目录中创建文件时都会创建一个事件。受监视的目录路径在设置模型中定义;我正在使用Java 7 WatchService API;

  3. 用于监视 Web 服务器和下载新文件的库。Web 服务器地址和保存目录都在设置模型中定义;我正在使用HttpsUrlConnection和一个计时器;

  4. MainWindow/
  5. MainController/MainModel:负责主应用程序窗口,该窗口有一个表,每次在受监视目录中创建新文件时都必须更新该表,并且每次由上述库下载文件时都必须更新该表。

那么如何正确实例化和传达这 4 个不同的功能呢?
他们的控制器如何在他们之间通信,因为他们都是相关的?我应该如何根据 MVC 组织这个项目?

请提供基本的 MVC 脚手架(骨架),并显示我在哪里创建实例,在哪里以及如何调用彼此的方法。我是Java的新手,特别是swing和mvc。我读了很多书,但我陷入了这种情况。

正如这里所建议的,模型-视图-控制器观察者等模式表示重复出现的设计元素。一个简单的大纲可以说明类的交互,但一般的解决方案超出了StackOverflow的范围。

不过,研究如何应用这些原则可能是有益的。假设您正在按照本教程进行操作,并在SwingWorker中实现了WatchService,如下所示。现在,假设您希望主视图(JTable)更新自身以响应到达的WatchEvent。您将安排相应的TableModel将自己注册为PropertyChangeListener工人,如下所示 此处 和 这里.当PropertyChangeEvent到达时,更新TableModel并触发相应的事件以更新JTable。已知的TableModel实现已包含所需的方法。

将采用类似的方法来更新表格,以响应来自网络的数据。

对于设置,请考虑此处提到的java.util.Preferences或此处讨论的javax.jnlp.BasicService

最新更新