【发布时间】:2015-04-01 21:30:51
【问题描述】:
我正在尝试编写一个 swing 应用程序并学习一些有关 mvc 模式的知识。另外我想保持我的 Swing 代码干净,所以我把我的 GUI 分成不同的类。 该类结构的一部分如下所示:
//all classes extending BasicGuiElement
-EntireContentElement has:
---ControlElement has:
------MainMenuElement
MainMenuElement 包含 MainMenuBar、Menu 和 MenuItem。现在,不同的 MenuItem 需要不同的 ActionListener。
这是我的问题:这个 ActionListener 应该从哪里来?我是否应该在视图中创建 EntireControlElement,向其传递 HashMap 并将此映射通过所有元素传递给 MainMenuElement?如果我有很多类都需要一堆动作监听器,我会传递一个监听器映射列表吗?那将是非常丑陋的代码,不是吗?
另一种解决方案是将模型作为 ModelInterface 传递给视图,并从动作侦听器中调用模型方法,这些方法将在视图类中创建……这会是更好的方法吗?
谢谢!
【问题讨论】:
-
模型和视图,一般来说,不应该相互了解,应该由控制器桥接,这意味着控制器应该充当视图的观察者并响应适当的事件.您可以做的一件事是定义视图和控制器之间的契约,该契约描述视图可以执行的操作(甚至是通用的“菜单事件”),控制器可以对其做出反应。您可以将
ActionListeners 直接附加到视图中的组件,然后将适当的事件触发回控制器。 -
展示了这个想法here
标签: java swing model-view-controller