加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 模型视图Presenter和复合视图

发布时间:2020-12-15 03:05:03 所属栏目:Java 来源:网络整理
导读:我试图在 java swing ui应用程序中遵循MVP(特别是Passive-View)模式. 应用程序的基本设计提醒向导控件.屏幕分为两个主要部分: 积极的观点. 一个静态导航栏,带有导航按钮. 用户可以使用按钮更改活动视图,但始终显示该栏. 在这个场景建模中,我有一堆不同的scr
我试图在 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.

解决方法

你能否修改View的定义:
interface View {
    JComponent getContainer();
}

这样每个视图都可以轻松获取视图内容? shell不需要知道返回JComponent的实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读