如何在Java中用Swing正确实现MVC?

2023-11-24

如果您想了解更多详细信息,请告诉我,或参阅此问题的最后几行。我已经读了很多书,我觉得我正在把一些简单的东西变成复杂的东西,但我仍然被困在这里和那里,所以也许你可以在那些非常具体的点上帮助我。

我使用的是 Netbeans IDE 7 和 JDK 7,没有框架。第一个窗口是 JFrame,所有其他窗口都是 modal=true 的 JDialog。

问题:

  1. 如何用swing正确实现MVC模式? 根据以下想法,哪一个更好:(A)或(B)?或者也许是另一个......为什么它更好?

    (A) 主要的:

    MyModel model
    MyView view(model)
    

    MyView:

    MyController(this, model)
    

    (B)
    主要的:

    MyModel model
    MyView View
    MyController controller(view, model)
    
  2. 当我在 MainFrame 中单击 jbutton1 时,我需要它打开 SettingsFrame 来编辑设置。我应该在哪里实例化SettingsFrame的View、Model和Controller?在大型机控制器中?

  3. 在 MVC 组织和实现方面,我应该如何处理(显然)缺少一两个 MVC“腿”(模型、视图或控制器)的更具体功能?我应该为他们创建空类吗?

    a. The implementation of a TrayIcon
    b. A URL connection class (an HttpsUrlConnection which will update data in the main jframe and also upload/download files)
    c. A Directory Monitor (which will update data in the main jframe and also use the urlconnection to download a file)
    d. My own implementation of TableModel
    e. json
    
  4. 如何在整个应用程序中正确保留和使用带有设置的对象?我将需要它在不同地方(视图、模型、控制器)的信息,但它可能会在运行时被用户更改)。让这个模型成为单例是个好主意吗?

  5. 当出现以下情况时我应该做什么:

    a. View needs some data from the Model? 
    What I'm doing: using the reference of Model which I keep in the View
    b. View needs some data from the Controller?
    What I'm doing: using the reference of Controller which I keep in the View
    c. Model needs some data from the Controller?
    Still didn't happen but I have no idea how to do correctly
    d. Model needs some data from the View?
    What I'm doing: pulling all my hair from my head...
    e. Controller needs some data from the View?
    What I'm doing: using the reference of the View which I keep in the Controller
    f. Controller needs some data from the Model?
    What I'm doing: using the reference of the Model which I keep in the Controller
    g. One of FooModel, FooView or FooController needs data from one of BarModel, BarView or BarController?
    What I'm doing: thinking of jumping from the highest building...
    
  6. 有关如何知道我是否正确实现 MVC 的任何提示吗?我应该在模型还是控制器中处理海量数据?

  7. 我也在使用 DAO,我正在做的是:我的模型有一个

    ArrayList MyModel 加载()

    方法创建 DAO 的实例并返回 DAO 返回的模型的 ArrayList,然后有时我在模型中处理这个模型的 ArrayList,有时我允许控制器处理它。这是一个好的做法还是有更好的方法?我所说的过程是指:迭代 ArrayList 并从模型中获取数据。

  8. 我有一个 PasswordCheck jDialog 来限制对某些视图的访问。我如何在 MVC 方面重用它,以便我可以使用相同的密码检查对话框来允许/限制对不同视图的访问,而不会使代码混乱?

  9. 还有其他提示、提示、想法或建议吗?

Context:我需要在短时间内开发一个 Java Swing MVC 软件,尽管默认情况下我不是 Java 开发人员,也不习惯实现 MVC 模式,特别是在 Java 中(我明白了这个想法,但有时它缺乏我的知识)实现类之间的关系)。 该应用程序基本上是本地/在线文件的监视器,在主框架中使用 JTable 来显示此数据。我使用新的 WatchService API 来跟踪本地文件并使用 DAO 将其信息保存在 h2 数据库中,然后将这些数据重新加载到主机 jtable 中。我还必须通知用户有关新文件的信息(我正在使用 TrayIcon)。对于在线文件监控/上传/下载,我使用 HttpsUrlConnection 和 json。它还可能允许设置自定义。

预先感谢您的时间和帮助。


看一下Sun(Oracle)的建议.

作为一种简化,您可以让每个组件(模型、视图、控制器)向顶级应用程序组件注册,以提供单个引用点,而不是每个组件(A 或 B)之间的单独引用。我引用的文章提供了推式和拉式设计的想法;我建议将推送作为一种更流行的现代方法。声明:我有 Java 和 MVC 的经验,但没有 Swing 本身的 MVC 经验。

我应该在哪里实例化视图、模型和控制器 设置框架?

当然,是的,或者在顶级应用程序组件中。

我应该如何处理(显然)缺少的更具体的功能 或者 MVC 的两条“腿”(模型、视图或控制器)?

我会将仅 GUI 的部分实现为您自己的 GUI 库。纯粹的算法/服务片段作为服务库。

我应该在模型还是控制器中处理海量数据?

数据处理算法非常适合控制器甚至服务库;除了可能的数据类型转换或验证之外,您的模型根本不应该进行太多处理。

如何在整个应用程序中正确保留和使用带有设置的对象?

请参阅我的注册说明;单例可能是合适的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Java中用Swing正确实现MVC? 的相关文章

随机推荐

  • 树枝模板内的变量 jquery

    我正在尝试使用 twig 模板内的 jquery 变量通过 ajax 发送 但我无法访问 twig 内的 jquery 变量 我的代码是
  • JPA 实体 - 指定持久性单元?

    我有一个使用多个持久性单元的 JavaEE 项目 有没有办法指定特定 JPA 实体属于哪个持久单元 一些实体位于一个数据源中 而其他实体位于我的第二个数据源中 有没有办法使用注释来区分两者 指定哪个持久单元Entity属于 使用persis
  • 为商店构建通用应用程序时出错:“清单引用文件‘MyAppName.dll’,该文件不是有效负载的一部分。”

    当尝试为 Windows 通用应用程序的商店创建应用程序包时 我在 Visual Studio 2015 中遇到此错误 清单引用文件 MyAppName dll 该文件不是有效负载的一部分 错误是在 MyAppSourcePath Pack
  • 使用 .NET(控制台应用程序)发布多个文件和表单值

    我想将多个文件和表单变量发布到 CGI 脚本 全部在oneHTTP 请求 我相信这需要一个 HTTP postmultipart form data编码 以下是发送所需信息的 HTML 表单示例 我需要通过应用程序发送相同的信息
  • ASP.NET 捆绑/缩小:包括动态生成的 Javascript

    我有一个动态生成 Javascript 的网站 生成的代码描述了类型元数据和一些服务器端常量 以便客户端可以轻松使用服务器的服务 因此它非常可缓存 生成的 Javascript 由 ASP NET MVC 控制器提供服务 所以它有一个 Ur
  • 理解 NumPy 的 einsum

    如何np einsum work 给定数组A and B 它们的矩阵乘法和转置计算使用 A B T 或等效地 使用 np einsum ij jk gt ki A B 注 这个答案是基于一个简短的博客文章 about einsum我不久前写
  • 在 Django 中过滤窗口函数

    我有以下模型 class Foobar models Model foo models IntegerField 我想出了如何计算连续的增量foo使用窗口函数的字段 qs Foobar objects annotate delta F fo
  • Node.js HTTP 响应正文的 unicode 问题

    使用本机 http 模块的 HTTP 请求的响应正文显示 unicode 字符的问号字符 而不是其实际值 这是我正在运行的基本代码片段 var http require http var google http createClient 8
  • 未定义的行为,或者:Swift 有序列点吗?

    在 C C 中 第二条语句 int i 0 int j i i i 调用两者 未指定的行为 因为操作数的求值顺序 未指定 并且 未定义的行为 因为对同一个对象的副作用i彼此之间是无序的 参见示例 为什么这些构造 使用 是未定义的行为 未定义
  • 如何在 didReceiveRemoteNotification 中获取 userInfo JSON 值

    func application application UIApplication didReceiveRemoteNotification userInfo NSObject AnyObject PFPush handlePush us
  • Magento 产品不会显示在类别中

    我最近负责构建和部署一个大型电子商务网站 过去 我们不得不使用客户遗留的 X cart 安装进行重新开发 与他们现有的工作流程集成度太高 我们听说过 Magento 的优点 所以我设置了一个测试安装来掌握它 在几个最初的问题之后 有一个实时
  • 在 ClickOnce 应用程序中使用 EventLog

    我有一个在多个 ClickOnce 应用程序中使用的库 如果这个库出现错误 我想将错误写入窗口EventLog 我找到了一个知识库文章关于如何 但这似乎需要管理员权限才能搜索源 特别是当试图搜索时它会窒息Security事件日志 是否有办法
  • 在java中使用不同的用户调用外部进程

    我们有一个作为 Windows 服务运行的 Java 应用程序 特定功能需要执行二进制文件 但使用启动应用程序的不同用户 有什么方法可以让我们以 以不同用户身份运行 样式调用 exe 我检查了ProcessBuilder的API 但没有找到
  • Powershell 和 SQL 参数。如果为空字符串,则传递 DBNull

    我得到这个参数 objDbCmd Parameters Add telephone System Data SqlDbType VarChar 18 Out Null objDbCmd Parameters telephone Value
  • 为什么这个 Javascript RGB 到 HSL 代码不起作用?

    我发现这个 RGB 到 HSL 脚本位于http www mjijackson com 2008 02 rgb to hsl and rgb to hsv color model conversion algorithms in javas
  • 如何旋转元素并将其放置在左上角或右上角?

    我用文本旋转了一个 div 并想将其放置在左上角 我设法将其放置在顶部 但无法使其与左边缘对齐 我该怎么做呢 credit position absolute background color pink transform rotate 9
  • Chrome 和 Firefox CORS AJAX 调用在某些 Mac 计算机上中止

    我们有一个网页 www saddleback com live Chrome 和 Firefox CORS AJAX 调用在某些 Mac 计算机上会中止 在装有 OSX 10 9 最新更新 Chrome 和 Firefox 最新更新 的 M
  • iOS 聊天应用程序如何通信?

    Whatsapp 和 Skype 等应用程序中的文本聊天如何进行通信 具体来说 消息如何received即时的 提前致谢 这和iOS中所谓的Socket编程有关 您可以参考苹果开发人员文档或这个链接可以在这方面帮助您 事实上 以下链接会非常
  • 在 ubuntu 18.04 上更新后无法打开 libmpfr.so.4

    今天我将笔记本电脑更新到 Ubuntu 18 04 现在我尝试为我的学士论文运行一个程序 但它给了我以下错误消息 加载共享库时出错 libmpfr so 4 无法打开共享对象文件 没有这样的文件或目录 我做了一些研究 我认为 libmpfr
  • 如何在Java中用Swing正确实现MVC?

    如果您想了解更多详细信息 请告诉我 或参阅此问题的最后几行 我已经读了很多书 我觉得我正在把一些简单的东西变成复杂的东西 但我仍然被困在这里和那里 所以也许你可以在那些非常具体的点上帮助我 我使用的是 Netbeans IDE 7 和 JD