Java swing ui アプリケーションで MVP (具体的には Passive-View) パターンに従おうとしています。
アプリケーションの基本設計は、ウィザード コントロールを連想させます。画面は次の 2 つの主要部分に分かれています。
- アクティブなビュー。
- ナビゲーション ボタンを備えた静的なナビゲーション バー。
ユーザーはボタンを使用してアクティブ ビューを変更できますが、バーは常に表示されます。
このシナリオをモデル化すると、それぞれが独自のプレゼンター、ビュー インターフェイス、およびビュー実装 (JPanel を使用) を備えた、さまざまなスクリーンがたくさんあります。次に、JFrame を使用して、シェル プレゼンター、ビュー インターフェイス、およびビューの実装を作成します。アイデアは、シェルが最初に読み込まれ、常に表示され、下部のナビゲーション バーが表示され、アクティブなビュー用のスペースが残されるというものです。シェル プレゼンターを使用すると、現在アクティブな画面を次のように設定できます。
interface View {
}
class Presenter {
View view;
public Presenter(View view) {
this.view = view;
}
public View getView() {
return view;
}
}
interface ShellView extends View {
void setActiveView(View activeView);
}
class ShellPresenter extends Presenter {
private ShellView shellView;
public void setActivePresenter(Presenter activePresenter) {
shellView.setActiveView(activePresenter.getView());
}
}
class ShellFrame implements ShellView {
private JFrame frame;
private JPanel activePanel;
private JPanel navigationBar;
public ShellFrame() {
Container c = frame.getContentPane();
c.add(activePanel);
c.add(navigationBar);
}
public setActiveView(View activeView) {
???
}
}
問題は setActiveView メソッドにあります。 View インターフェイスが一般的で JPanels について何も知らない場合、activeView を activePanel に設定する方法がわかりません。明らかに、プレゼンターに JPanels についても知られたくありません。