我试图在
java swing ui应用程序中遵循MVP(特别是Passive-View)模式.
应用程序的基本设计提醒向导控件.屏幕分为两个主要部分:
>积极的观点.
>一个静态导航栏,带有导航按钮.
在这个场景建模中,我有一堆不同的screers,每个都有它自己的演示者,视图界面和视图实现(使用JPanel).然后我有一个Shell演示者,使用JFrame查看intefrace和视图实现.我们的想法是shell将首先加载并始终显示,显示底部导航栏并为活动视图留出空间. shell演示者将允许设置当前活动屏幕,有点像这样:
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方法中:我不确定如何将activeView设置为activePanel,当View界面是一般的时候,因此对JPanels一无所知.显然,我不希望我的演示者也知道JPanels.