java - 如何在 Java Swing 中的两个不同 MVC Controller 之间正确通信?

标签 java swing model-view-controller

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

请提供一些代码!

背景: 我有 2 个不同的 Controllers-View-Model 和 2 个库,它们需要相互通信:

  1. SettingsWindow/SettingsController/SettingsModel:负责应用设置。该模型是单例,因为我需要整个应用程序的设置数据;

  2. 用于监视目录的库,每次在特定目录中创建文件时都会创建一个事件。被监控的dir路径定义在SettingsModel中;为此,我正在使用 Java 7 WatchService API;

  3. 用于监控网络服务器和下载新文件的库。 Web服务器地址和保存目录都定义在SettingsModel中;我为此使用了 HttpsUrlConnection 和一个计时器;

  4. MainWindow/MainController/MainModel:负责主应用程序窗口,它有一个表格,每次在受监控目录中创建新文件时,以及上述库下载文件时,都必须更新表格.

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

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

最佳答案

按照建议here , model-view-controllerobserver 等模式代表重复出现的设计元素。一个简单的 outline可能会说明类的交互,但通用解决方案超出了 StackOverflow 的范围。

不过,了解如何应用这些原则可能会有用。假设您正在关注 tutorial并在 SwingWorker 中实现了 WatchService,如图所示 here .现在,假设您希望主视图(JTable)更新自身以响应到达的 WatchEvent。您可以安排相应的 TableModel 将其自身注册为 PropertyChangeListener,如 here 所示。和 here .当 PropertyChangeEvent 到达时,您更新 TableModel 并触发适当的事件以更新 JTable。已知的 TableModel 实现已包含所需的方法。

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

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

关于java - 如何在 Java Swing 中的两个不同 MVC Controller 之间正确通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10955589/

相关文章:

具有约束的 Java 多元非线性优化器库

java - 有没有办法用模式指定gradle源集?

java - 将 JPanel 添加到不同类中的另一个 JPanel

javascript - 在nodejs中放置数据库检查的正确位置

java - GAE : Uploading to Blobstore Service kills the Session

java - 以编程方式创建的 AWS EC2 实例未显示在浏览器中

java - MouseListener 中的 getX 和 getY 问题

java - 运行时事件调度线程上的 Swing 验证代码

c# - 如何在 javascript 中访问 ViewData

asp.net-mvc - MVC 不应该默认忽略图像吗?