1

我被要求改造一个现有JDialog的内部 Swing 应用程序的子容器。我将从头开始重写对话框,并被要求带头使 Swing 应用程序类似于真正的 MVC/MVP 架构(因此我的JDialog改造将是对应用程序本身的许多支持 MVC 更改中的第一个)。

我理解 MVC/MVP,因为它与 Web 应用程序有关:

  • 控制器 - 是 Web 应用程序框架为处理 HTTP 请求而调度的;通常由多个方法组成,其中每个“控制器方法”处理对稍微不同的 URL 的请求
  • 模型 - 表示调用特定数据的 DAO 或 POJO/bean;控制器从数据库中获取模型并将其注入视图
  • 视图 - 最终生成 HTML/JSP 并将被发送回客户端/请求者的机制

这不是所有MVC/MVP Web 框架的运作方式,而是总体思路。

但我正在努力确定如何将其转换为 Swing 应用程序。在 Swing 应用程序中,您有:

  • JDialog本身_
  • 构成对话框“视图”的所有 UI 小部件(JButtonsJTextFields等)
  • 所有 UI 小部件的操作/事件侦听器,它们共同构成“业务逻辑”,用于在用户与视图交互时对话框将如何操作
  • 所有其他“UI 粘合代码”(设置将启用/禁用哪些小部件,设置它们在屏幕上的大小和位置,设置它们的工具提示文本等)
  • 加上很多其他的东西

所以我问:我如何组织JDialog使用 MVC/MVP 架构模式运行所需的所有代码?此外,如果有任何文章、教程或现有的开源项目展示 MVC/MVP Swing 应用程序,我也会对它们感兴趣。提前致谢!

4

3 回答 3

1

As discussed here, Swing MVC hinges on the observer pattern used to propagate model changes back to any listening view(s). As a result, much depends on the components in your JDialog. If your dialog must be modeless, the examples here and here may be helpful.

于 2013-05-07T12:25:54.513 回答
1

由于那里有许多有效的配方,我将只讨论我使用的:修改后的 MVP 设计,它也借鉴了The Humble Dialog Box 的想法。

基本上,使用尽可能少的应用程序逻辑创建您的 GUI(目标为零)。创建具有 GUI 句柄的“presenter”类(类似于控制器)并将适当的侦听器注入 UI。

一些好处:

  1. 由于所有应用程序代码都在 UI 之外,因此您的代码现在是 100% 可测试的。
  2. 您可以快速创建 GUI 原型,而无需每次都启动您的应用程序,这可以节省大量时间。
  3. 关注点分离使代码更易于阅读/维护。
  4. 您的 GUI 代码将仅是 Swing。不熟悉您的应用但熟悉 Swing 的新团队成员可以直接加入。

关于 Swing 对 MVC 的实现,我们其实并不关心。这是 Swing 的业务。我们假设 Swing 有效(它通常会这样做)。诚然,我们需要知道这些用于编写自定义渲染、编辑器、模型等的东西,但这些是应用程序框架(我认为你要问的)不需要知道或关心的细节关于,在大多数情况下。

于 2013-05-07T18:48:43.203 回答
0

我会这样做:

MyModel model = engine.getDataFromDatabase();
myController.displayDataOnMyCustomView(myPresenter, model);

在控制器端,可能会移除很多监听器,根据模型设置数据,设置大小、位置和任何其他表示东西的状态,最后重新添加监听器。

myPresenter应该是在他的 UI 树上JDialog具有各种基本 ui 元素 ( )的自定义。Component

于 2013-05-07T12:15:50.420 回答