当前位置: 首页 > 面试题库 >

JAVA Swing MVC-主控制器?

松钟展
2023-03-14
问题内容

我在设计要开发的应用程序体系结构时遇到了一些麻烦。我正在研究JAVA,因此开始研究此应用程序是因为我想加深对JAVA,体系结构和模式的整体了解。我想遵循指导方针来制作可复用的,低耦合的应用程序,就像应该的那样。该应用程序只有一个JFrame,但内部有几个JPanel,每个JPanel代表应用程序的一个模块。

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

我是否应该有一个主Controller类,其中包含对所有其他Controller的引用?(我在此处有一张图片对此进行了演示:https
:
//docs.google.com/file/d/0B7tBdn5slIFeY2FoSmxESTREQ1k/edit?usp=sharing)

在这种情况下,所有需要更改要显示的模块的事件都应重定向到主控制器吗?

还是应该仅将JFrame与应用程序的控制器耦合,并直接与它们通信?

基本上,我想知道是否需要开设一个“管理”所有其他课程的课程。我已经阅读了一些解释和不同的观点,但是我认为这更加具体。

希望我已经说清楚了(也希望我的解释比我的绘画要好:))。

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

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

菜单(视图)是否应该具有自己的Controller,并且此Controller与JFrame通信?然后,JFrame将新模块加载到它的Layout中吗?还是JFrame应该有自己的控制器(或模型,如Gilbert
Le Blanc所说)?

我知道这可能看起来很具体,或者很容易理解,但是每次想到台式机应用程序时,我都很难理解。


问题答案:

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

还是应该仅将JFrame与应用程序的控制器耦合,并直接与它们通信?

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

我将GUI控制器类与其他任何应用程序控制器类(例如,数据访问对象)放在单独的程序包中。

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

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

编辑以响应问题中的更改。

GUI控制器与GUI模型是分开的。GUI模型包含组成GUI的所有数据元素。JTextFields的字符串,JTables的DefaultTableModels。

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

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

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



 类似资料:
  • 我在设计我要开发的应用程序的架构时遇到了一些问题。我正在研究JAVA,我开始研究这个应用程序,因为我想加深我对JAVA、体系结构和模式的全面了解。我想按照这些指导原则来创建一个可重用、低耦合的应用程序,就像它应该做的那样。应用程序只有一个JFrame,但其中有几个JPanel,每个代表应用程序的一个模块。 问题是:在JAVA Swing中,如何实现一个合适的MVC模式?我在如何理解应该如何做的问题

  • 这让我的头撞到了墙上!!!!希望有人能给我指出正确的方向。我确信我在做一些完全愚蠢的事情。我找了又找,但似乎找不出为什么这不管用!!(在IntelliJ IDE 15.x上使用JDK8.x和Scenebuilder)。我试图在GUI上显示数据,但希望access通过编程将这些数据从其他类/方法发送给它。。。。下面是一个简单的概念,我在着手更大的项目之前,正试图让它发挥作用: 我的简单GUI在FXM

  • 我有一个主控制器来处理我的主控制器。fxml和处理弹出窗口的第二个控制器。fxml 从主控制器按下按钮时,弹出窗口出现。在弹出窗口中添加玩家。玩家通过textfield添加到数组中,并且必须发送回主控制器。我在弹出控制器中有一个名为“Btnaply”的按钮,当按下该按钮时,我想关闭弹出窗口并从主控制器类处理数组。我只想让我的主控制器类知道弹出窗口。 这是我从主控制器创建弹出窗口的方式: 现在的问题

  • 我在本地机器上的vbox上托管的ubuntu服务器上安装了openshift源(单节点集群),我需要使用其来自我的主机(客户端)的IP通过Web访问它,但它总是将我的IP重定向到本地主机172.0.0.1,如何克服这个问题?

  • Lnmp虚拟主机控制面板简介 01)此虚拟主机控制面板是由易客CRM(http://www.c3crm.com)开发团队基于amh针对lnmp0.7一键安装包开发的面板,目前在Redhat和Centos下测试正常。 02) 简单: 简洁精致,支持ssh、web在线轻松管理维护虚拟主机、MySQL、FTP。 03) 高效: 使用高性能Nginx服务器软件支持,面板基于AMH命令行运行,实现过程快速高

  • 我需要在主控制器中绑定来自不同fxml的控件。我有3个fxml文件,分别名为MainView.fxml、ChildView1.fxml和ChildView2.fxml。 mainview.fxml ChildView1.fxml 默认情况下,从ChildView1Controller禁用button1。 我希望在我的另一个视图(ChildView2.fxml)中的表行被选中时启用它。同样,在取消选