gpt4 book ai didi

JAVA Swing MVC - 主 Controller ?

转载 作者:搜寻专家 更新时间:2023-10-31 19:56:22 26 4
gpt4 key购买 nike

我在设计我尝试开发的应用程序的架构时遇到了一些麻烦。我在做JAVA,我开始做这个应用是因为我想加深我对JAVA、架构和模式的整体知识。我想按照指南制作一个可重用、低耦合的应用程序,就像它应该的那样。该应用程序只有一个 JFrame,但在其内部有多个 JPanel,每个 JPanel 代表应用程序的一个模块。

问题是:在JAVA Swing中,如何实现一个合适的MVC模式?我为如何理解应该如何完成而苦苦思索。

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

在这种情况下,所有需要更改正在呈现的模块的事件都应该重定向到主 Controller 吗?

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

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

希望我已经说清楚了(也希望我的解释比我的图更好 :))。

编辑:应用程序使用示例:

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

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

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

最佳答案

当您有一个带有 GUI 的应用程序时,GUI 模型就变成了应用程序 View 。应用程序通过 GUI 模型与 GUI 交互。

Or should I just couple the JFrame with the Controllers of the application, and communicate directly with them?

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

我将 GUI Controller 类与任何其他应用程序 Controller 类(如数据访问对象)放在一个单独的包中。

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

Traffic Signal GUI文章介绍了如何编写非常简单的 GUI 的基础知识。

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

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

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

假设您要使用左侧的菜单,每个菜单选项(切换 JButton?)都将有自己的 Controller 方法或类。这些 Controller 必须有一个 JFrame 实例,这样 Controller 才能调用 JFrame 类中的方法,将适当的面板放在显示器的中央。 Controller 决定调用哪个方法,但方法本身是 JFrame 类的一部分。

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

关于JAVA Swing MVC - 主 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15693321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com