Java MVC/MVP在Swing应用程序中是如何工作的?

Java MVC/MVP在Swing应用程序中是如何工作的?,java,swing,model-view-controller,mvp,jdialog,Java,Swing,Model View Controller,Mvp,Jdialog,我被要求修改现有的JDialog,它是内部Swing应用程序的子容器。我将从头开始重新编写对话框,并被要求负责使Swing应用程序类似于真正的MVC/MVP体系结构(因此我的JDialogReform将是对应用程序本身的许多亲MVC更改中的第一个) 我理解MVC/MVP,因为它与web应用程序有关: 控制器-是web应用程序框架用来处理HTTP请求的组件;通常由多个方法组成,其中每个“控制器方法”处理对稍微不同的URL的请求 模型—表示特定于调用的数据的DAO或POJO/bean;控制器从数据

我被要求修改现有的
JDialog
,它是内部Swing应用程序的子容器。我将从头开始重新编写对话框,并被要求负责使Swing应用程序类似于真正的MVC/MVP体系结构(因此我的
JDialog
Reform将是对应用程序本身的许多亲MVC更改中的第一个)

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

  • 控制器-是web应用程序框架用来处理HTTP请求的组件;通常由多个方法组成,其中每个“控制器方法”处理对稍微不同的URL的请求
  • 模型—表示特定于调用的数据的DAO或POJO/bean;控制器从数据库获取模型并将其注入视图
  • 视图-最终生成HTML/JSP并发送回客户机/请求者的机制
这不是所有MVC/MVP web框架的操作方式,而是总体思路

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

  • JDialog
    本身
  • 构成对话框“视图”的所有UI小部件(
    JButtons
    JTextFields
    ,等等)
  • 所有UI小部件的操作/事件侦听器共同构成了“业务逻辑”,用于说明当用户与视图交互时对话框将如何操作
  • 所有其他“UI粘合代码”(设置哪些小部件将被启用/禁用,设置它们在屏幕上的大小和位置,设置它们的工具提示文本等)
  • 还有很多其他的东西
因此,我问:如何使用MVC/MVP架构模式组织运行
JDialog
所需的所有代码?此外,如果有任何文章、教程或现有的OpenSouce项目展示MVC/MVP Swing应用程序,我也对它们感兴趣。提前谢谢

我想这样做:

MyModel model = engine.getDataFromDatabase();
myController.displayDataOnMyCustomView(myPresenter, model);
在控制器端,可能会删除很多侦听器,根据模型设置数据,设置大小、位置和任何其他表示内容的状态,最后重新添加侦听器


myPresenter
应该是一个自定义的
JDialog
,在其ui树上有各种基本ui元素(
组件

如前所述,Swing MVC依赖于用于将模型更改传播回任何侦听视图的。因此,很大程度上取决于
JDialog
中的组件。如果您的对话框必须是非模态的,那么示例和示例可能会有所帮助。

因为有很多有效的方法,我只讨论我使用的方法:一种改进的MVP设计,它也借鉴了

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

一些好处:

  • 因为所有的应用程序代码都在UI之外,所以您的代码现在是100%可测试的
  • 您无需每次启动应用程序就可以快速创建GUI原型,这可以节省大量时间
  • 关注点的分离使代码更易于阅读/维护
  • 您的GUI代码将仅为Swing。不熟悉您的应用程序但熟悉Swing的新团队成员可以立即加入
  • 关于Swing的MVC实现,我们实际上并不关心。这是斯温的事。我们假设Swing可以工作(通常是这样)。诚然,我们需要知道编写自定义渲染、编辑器、模型等的这些事情,但这些是应用程序框架(我想你是在问这个问题)不需要知道或关心的大部分细节