0

次の2つのUIコンポーネントがあります。

class UIPanel extends JPanel{ ... }

class MainPanel { Model m;
    //instantiates UIPanel }

ここでの問題は、UIPanelクラスに、Modelを使用してユーザーアクションの処理方法を決定するActionListenerを追加したいということです。残念ながら、2つのクラスを分割することにしました。また、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 からのユーザー イベントをリッスンし、それをどうするかを決定するのはコントローラーです。

その後、モデルは複数のビューに対して起動できます。同じモデル (ビューごとに 1 つ) で複数のコントローラーを動作させたい場合や、各ビューからのイベントをリッスンするコントローラーを使用することができます。個人的には、1 つのビューに対して 1 つのコントローラーを使用します。

于 2012-08-07T09:59:35.110 に答える