Asa*_*vid 7 java mvp swing design-patterns passive-view
我试图在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) {
???
}
}
Run Code Online (Sandbox Code Playgroud)
问题出在setActiveView方法中:我不确定如何将activeView设置为activePanel,当View界面是一般的时候,因此对JPanels一无所知.显然,我不希望我的主持人也知道JPanels.
您能否将 View 的定义修改为:
interface View {
JComponent getContainer();
}
Run Code Online (Sandbox Code Playgroud)
让每个视图都能轻松获取视图内容?shell 不需要知道返回的 JComponent 的实现是什么。
| 归档时间: |
|
| 查看次数: |
2894 次 |
| 最近记录: |