如何在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? 的相关文章

  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 比较两个文本文件的最快方法是什么,不将移动的行视为不同

    我有两个文件非常大 每个文件有 50000 行 我需要比较这两个文件并识别更改 然而 问题是如果一条线出现在不同的位置 它不应该显示为不同的 例如 考虑这个文件A txt xxxxx yyyyy zzzzz 文件B txt zzzzz xx
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 我可以使用子接口重新编译公共 API 并保持二进制兼容性吗?

    我有一个公共 API 在多个项目中多次使用 public interface Process
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 具有 java XSLT 扩展的数组

    我正在尝试使用 java 在 XSLT 扩展中使用数组 我收到以下错误 Caused by java lang ClassCastException org apache xpath objects XObject cannot be ca
  • 以编程方式在java的resources/source文件夹中创建文件?

    我有两个资源文件夹 src 这是我的 java 文件 资源 这是我的资源文件 图像 properties 组织在文件夹 包 中 有没有办法以编程方式在该资源文件夹中添加另一个 properties 文件 我尝试过这样的事情 public s
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • Jersey 客户端请求中未设置 Content-Length-Header

    我正在使用 Jersey Client 访问网络服务 如下所示 response r accept MediaType TEXT PLAIN TYPE header content length 0 post String class 其中
  • 为什么这个作业不起作用?

    我有课Results which extends ArrayList
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Trie 数据结构 - Java [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库或文档 链接提供了在 java 中实现 Trie 数据结构的更多信息 任何帮助都会很棒 Thanks 你可以阅读Java特里树
  • 如何从 Maven 存储库引用本机 DLL?

    如果 JAR 附带 Maven 存储库中的本机 DLL 我需要在 pom xml 中放入什么才能将该 DLL 放入打包中 更具体地举个例子Jacob http search maven org artifactdetails 7Cnet s
  • 在 RESTful Web 服务中实现注销

    我正在开发一个需要注销服务的移动应用程序 登录服务是通过数据库验证来完成的 现在我陷入了注销状态 退一步 您没有提供有关如何在应用程序中执行身份验证的详细信息 并且很难猜测您在做什么 但是 需要注意的是 在 REST 应用程序中 不能有会话
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring

随机推荐

  • 树枝模板内的变量 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