Java Swing MVC 动态组件

标签 java swing user-interface model-view-controller

我在 C# ASP.net 和 PHP CodeIgniter + Laravel 的 Web 应用程序中广泛使用了 MVC 模式,但现在我必须为 java Swing 应用程序实现它,并且在实际动态添加时我有点迷失元素(如 JPanel)从事件到 View 。在任何 Web MVC 框架中,我都会简单地返回部分 View 并将其注入(inject)到 div 中。更多说明:

我有一个 View ,它只有一件事:MainController 监听的按钮。当我单击按钮时, View 告诉 Controller 调用方法“buttonClicked()”。结果应该是创建一个 JPanel 并将其添加到 View 中,但是在 Java Swing MVC 中如何做到这一点?就像我说的,在 Web MVC 框架中,我可能会做类似“返回新的partialView(model)”之类的事情。

由于唯一应该依赖于 Swing 框架的类是 View ,我知道 JPanel 是在其中创建的,但是 Controller (或模型)不应该告诉 View 将其放置在哪里吗?这是如何运作的?

谢谢。我希望我的想法足够清晰,我刚刚开始使用 java。

最佳答案

原则上,模型应该关注输出的所有逻辑和处理物理。在本例中,这是由用户输入引起的主视图 JPanel 状态的变化。因此,它是 Model 的业务,并且只是 Model 的业务。然而, Controller 的工作是将更改传达给 View ,而 View 仍然负责显示更改。这样,MVC 模型的单一责任原则得以维持。

这是实现此目的的一种方法:

查看:

  • 在 View 类中实现一个方法,该方法接受 JPanel 参数,将其等同于 View 对象的面板并更新面板的 UI(例如 newPanelUpdate(JPanel panel){...}) .

型号:

  • 添加一个新的 JPanel 字段(例如newPanel)及其“setter 和 getter”。

Controller :

  • 实现一个 actionListener,一旦单击按钮,就会从模型中获取新 JPanel 的值并将其作为 newPanelUpdate() 方法的参数传递。

主要程序:

  • 在这里,您创建了单击按钮后要显示的新 JPanel,并将模型中的 JPanel 字段设置为它。

此方法假设您仅使用 3 个类来表示模型、 View 和 Controller 。实际上,模型实现可能不那么方便,但仍遵循相同的原理。

关于Java Swing MVC 动态组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22088114/

相关文章:

java - 在数组列表上选择 vector 遗留类

java - 无法解析接口(interface) 26 Landroid/content/ClipboardManager$OnPrimaryClipChangedListener;'

java - 使用其他语言而不是英语作为java字符串(以波斯语为例)

c - 如何使用 Gtk 获取屏幕的大小?

java - 如何在 Java 中锁定框架 (GUI)

java - 在哪里添加 @XMLElement(name ="name") 注释

java - 切换浏览器选项卡时隐藏小程序的 JDialog

java - 如何将输入从 GUI 传递到客户端而不是服务器?

java可扩展的JDialog

java - 需要帮助来创建 java GUI