JAVA Swing MVC - 主控制器?

Ped*_*rte 5 java model-view-controller swing controller

我在设计我正在尝试开发的应用程序的体系结构时遇到了一些麻烦.我正在研究JAVA,我开始研究这个应用程序,因为我想加深我对JAVA,架构和模式的整体了解.我想按照指南来制作一个可重用,低耦合的应用程序,就像它应该的那样.该应用程序只有一个JFrame,但在其中有几个JPanel,每个JPanel代表一个应用程序的模块.

问题是:在JAVA Swing中,如何实现适当的MVC模式?我在如何理解它应该如何完成的方式上挣扎.

我是否应该拥有一个主控制器类,它包含对所有其他控制器的引用?(我有一张图片来证明这一点,在这里:https://docs.google.com/file/d/0B7tBdn5slIFeY2FoSmxESTREQ1k/edit?usp =sharing)

在这种情况下,是否所有需要更改正在呈现的模块的事件都会重定向到主控制器?

或者我应该将JFrame与应用程序的控制器耦合,并直接与它们通信?

基本上,我想知道我是否需要一个"管理"所有其他课程.我已经阅读了几个解释和不同的意见,但我相信这有点具体.

希望我已经清楚了(并希望我的解释比我的绘图更好:)).

编辑: 应用程序用法的示例:

  • 应用程序的整个生命周期中的一个(仅一个)JFrame;
  • 菜单将在左侧,如BorderLayout.WEST;
  • 应用程序的当前模块将位于中心,如BorderLayout.CENTER;
  • 当用户按下菜单的一个按钮时,相应的模块被加载到BorderLayout.CENTER;

菜单(View)是否应该拥有自己的Controller,并且此Controller与JFrame通信?JFrame将新模块加载到它的布局中?或者JFrame应该有自己的控制器(或模型,如Gilbert Le Blanc所说)?

我知道这可能看似具体,或易于理解,但每当我想到桌面应用程序时,我都很难理解这一点.

Gil*_*anc 4

当您的应用程序带有 GUI 时,GUI 模型就成为应用程序视图。应用程序通过GUI模型与GUI交互。

或者我应该将 JFrame 与应用程序的控制器耦合,并直接与它们通信?

这就是我所做的。我已将控制器类打包在一起,但我从未创建过一个主控制器类。

我将 GUI 控制器类保存在与任何其他应用程序控制器类(例如数据访问对象)分开的包中。

我通常将每个 JPanel 放在它自己的类中,但我不会称其为要求。JFrame 有自己的类,尽管 JFrame 的实例和 GUI 模型的实例都传递给几乎所有的 GUI 组件。这使得菜单操作成为可能。

这篇交通信号 GUI文章介绍了如何编写非常简单的 GUI 的基础知识。

编辑以回应问题的变化。

GUI 控制器与 GUI 模型是分开的。GUI 模型包含构成 GUI 的所有数据元素。JTextField 的字符串,JTable 的 DefaultTableModel。

根据您的应用程序设计,我建议您为要放入应用程序中心的每个 JPanel 创建一个 Java 类。您的 JFrame 将根据菜单控制显示哪个 JPanel。我还建议您查看 JTabbedPane 它使用不同的用户界面来完成选择要使用的面板的任务。

假设您使用左侧的菜单,每个菜单选项(切换 JButton?)将有它自己的控制器方法或类。这些控制器必须具有 JFrame 的实例,以便控制器可以调用 JFrame 类中的方法,将适当的面板置于显示的中心。控制器决定调用哪个方法,但方法本身是 JFrame 类的一部分。

我一直在谈论 JFrame 和 JPanel 类。使用组合而不是继承来构建这些类非常重要。JFrame 类包含一个 JFrame。它不扩展 JFrame。扩展 Swing 组件的唯一时间是当您想要重写组件方法时。