0

我有两个 UI 组件如下:

class UIPanel extends JPanel{ ... }

class MainPanel { Model m;
    //instantiates UIPanel }

这里的问题是,在 UIPanel 类中,我想添加一个 ActionListener,它将使用 Model 来决定如何处理用户操作。不幸的是,我决定拆分这两个类,我无法直接访问模型。一个明显的解决方案是将 UIPanel 类简单地粘贴在 MainPanel 中,但我在想是否有办法保持拆分。

4

2 回答 2

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

于 2012-08-07T10:01:03.460 回答
0

听起来您需要添加一个控制器类(使其更像 MVC)。操纵模型的控制器将听到视图操纵。然后模型会触发一个事件,说它已经改变并且视图会监听。收到通知后,视图将更新。

所以它是控制器,它从 UI 监听用户事件并决定如何处理它。

然后模型可以触发多个视图。如果您希望有多个控制器作用于同一模型(每个视图一个)或在控制器上监听来自每个视图的事件,您可以这样做。就我个人而言,我会为一个视图使用一个控制器。

于 2012-08-07T09:59:35.110 回答