的Java Swing MVC - 主控制器?(JAVA Swing MVC - Main Con

2019-08-18 04:01发布

我有一些麻烦设计一个应用程序,我试图发展的架构。 我工作的JAVA,我开始对这个应用程序的工作,因为我想加深我的JAVA,架构和模式的整体认识。 我想遵循的准则做一个可重复使用的,低结合的应用程序,像它应该是。 该应用程序只有一个JFrame的,但它里面有几个JPanels,每一个代表的应用程序的模块。

现在的问题是:在JAVA Swing中,如何实现一个合适的MVC模式? 我挣扎如何理解它应该做的方式。

我应该有一个主控制器类,保存所有其他控制器的参考? (我有一个形象来证明这一点,在这里: https://docs.google.com/file/d/0B7tBdn5slIFeY2FoSmxESTREQ1k/edit?usp=sharing )

在这种情况下,应该都需要改变正被呈现的模块的事件重定向到主控制器?

或者我应该只是情侣的JFrame与应用的控制器,并直接与他们沟通?

基本上,我想知道我是否需要有一个“管理”其他所有的类。 我已经看过好几种说法,和不同的意见,但我相信这是一个更具体一点。

希望我已经说清楚了(和希望以及我的解释是不是我的画:)更好)。

编辑:所述应用使用的一个示例:

  • 一个在整个应用程序的所有生命周期(一个只有一个)的JFrame;
  • 菜单将在左侧,如在BorderLayout.WEST;
  • 的应用程序的当前模块将在中心,如在BorderLayout.CENTER;
  • 当用户按下菜单的一个按键,相应的模块加载到所述BorderLayout.CENTER;

如果菜单(视图)有它自己的控制器,以及与此的JFrame控制器通信? 而JFrame中加载新的模块到它的布局? 还是应该JFrame中有自己的控制器(或模型,吉尔伯特勒布朗说的)?

我知道这可能看起来具体,否则容易理解,但每次我想到一个桌面应用程序的,我很难理解这一点。

Answer 1:

当你有一个GUI应用程序,图形用户界面模型成为应用程序视图。 该应用程序与通过GUI模式GUI交互。

或者我应该只是情侣的JFrame与应用的控制器,并直接与他们沟通?

这是我做了什么。 我已经封装控制器一起上课,但我从来没有创建一个主控制器类。

我保存在单独的包中的GUI控制器类从任何其他应用程序的控制器类,如数据访问对象。

我通常把每个JPanel的在自己的类,但我不认为这是一个必要条件。 JFrame中有它自己的类,但JFrame中和GUI模型的实例的实例被传递到几乎所有的GUI组件。 这使得菜单操作成为可能。

这种交通信号GUI本文将详细说明如何编写一个非常简单的图形用户界面的基本知识。

编辑以对问题的变化作出反应。

GUI控制器是从GUI模型分开。 该GUI模型包含所有数据元素,让你的GUI。 字符串JTextField中,DefaultTableModels为JTable中。

根据您的应用程序的设计,我建议你创建一个Java类,你希望把你的应用程序中心每JPanel的。 你的JFrame将控制其的JPanel显示,基于在菜单上。 我还建议你看看JTabbedPane的 ,它使用不同的用户界面来完成选择哪些面板一起工作的任务。

假设你在左侧菜单中去,每个菜单选项(切换JButton的?)都会有它自己的控制方法或类。 这些控制器必须有JFrame的一个实例,这样的控制器可以调用在把相应的面板在显示器的中心JFrame类的方法。 控制器决定要调用哪些方法,但这些方法本身是JFrame类的一部分。

我一直在谈论的JFrame和JPanel的类。 您使用组成,而不是继承来构建这些类是很重要的。 JFrame类包含一个JFrame。 它不扩大的JFrame。 您延长Swing组件的唯一情况是,当你想覆盖的部件的方法。



Answer 2:

如所讨论的在这里 ,Swing组件使用一个可分离模型架构与模型和使用视图松耦合观察者模式 。 并非所有的GUI控制必须是应用程序的控制器的一部分。 使用ActionListener ,如Action ,是用于封装应用程序的功能特别方便。

附录:我会使用CardLayout ,说明这里到开关面板。 注意如何Action处理程序可以用按钮,菜单,连击,工具栏等每张卡的内容使用可以有它自己的实现MVC模式的,从别人分开。 使用PropertyChangeEvent ,看到这里 ,组件之间的通信。

在一般情况下,Swing组件,例如按钮和表,已经听他们各自的模型,让你专注于你的应用程序的数据模型倾听意见。 方便的是,一个Swing模型,如ComboBoxModelTable Model`,可以有不止一个监听器。



文章来源: JAVA Swing MVC - Main Controller?