我有两个UI组件如下:
class UIPanel extends JPanel{ ... }
class MainPanel { Model m;
//instantiates UIPanel }
这里的问题是在UIPanel类中我想添加一个ActionListener,它将使用Model来决定如何处理用户操作。不幸的是我决定拆分这两个类,我无法直接访问Model。一个显而易见的解决方案是简单地将UIPanel类放在MainPanel中,但我在想是否有办法保持分裂。
答案 0 :(得分:3)
您可以简单地为UIPanel
提供Model
:
class UIPanel {
UIPanel(Model m) {
m.addActionListener(listener);
}
}
class MainPanel {
...
MainPanel() {
...
UIPanel uiPanel = new UIPanel(m); // Constructor, a separate setter would be possible also
...
}
}
这显然是一个非常紧密的耦合。也许MainPanel
根本不需要Model
的引用?
答案 1 :(得分:0)
听起来你需要添加一个控制器类(使其更像MVC)。控制器将听到视图操作,操纵模型。然后该模型将触发一个事件,表明它已经改变并且视图将会收听。收到通知后,视图将会更新。
因此,控制器不是从UI中侦听用户事件,而是决定如何处理它。
然后,模型可以触发多个视图。如果您希望有多个控制器作用于同一模型(每个视图一个),或者让控制器监听每个视图中的事件,则可以。就个人而言,我会为一个视图设置一个控制器。