gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:57:56 25 4
gpt4 key购买 nike

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

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

问题:

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

    (一)主要:

    MyModel model
    MyView view(model)

    我的观点:

    MyController(this, model)

    (乙)
    主要:

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

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

    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. 如何在整个应用程序中正确地保存和使用带有设置的对象?我将在不同的地方( View 、模型、 Controller )需要它的信息,但它可能会在运行时被用户更改)。让这个模型成为单例是个好主意吗?

  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 的任何提示?我应该在 Model 还是 Controller 中处理海量数据?

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

    ArrayList MyModel load()

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

  8. 我有一个 PasswordCheck jDialog 来限制对某些 View 的访问。我如何根据 MVC 重用它,以便我可以使用相同的 PasswordCheck 对话框来允许/限制对不同 View 的访问,而不会在代码中造成困惑?

  9. 还有其他技巧、提示、想法和建议吗?

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

提前感谢您抽出时间提供帮助。

最佳答案

看看Sun's (Oracle's) suggestions .

作为一种简化,您可以让每个组件(模型、 View 、 Controller )注册到顶级应用程序组件,以提供单个引用点,而不是每个组件(您的 A 或 B)之间的单独引用。我引用的文章提供了推拉设计的思路;我建议将 push 作为一种更流行的现代方法。披露:我有 Java 和 MVC 的经验,但没有 Swing 本身的 MVC。

where should I instantiate the View, the Model and the Controller of the SettingsFrame?

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

how should I handle more specific features that (apparently) lacks one or two of the MVC "legs" (either Model or View or Controller)?

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

Should I process massive data in Model or Controller?

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

How to correctly keep and use an object with settings through the whole application?

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

关于java - 如何使用 Swing 在 Java 中正确实现 MVC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10931730/

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