免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3817 | 回复: 0
打印 上一主题 下一主题

用 Scope 框架开发 MVC 结构的 Swing 程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-14 16:54 |只看该作者 |倒序浏览
MVC 框架已经广泛的被应用于软件设计的各个领域。
在 J2EE 中很强调 MVC 的框架

在基于 Swing 开发的窗口程序里,可以使用一个叫 scope 的 mvc 框架。

scope 是一个开放源代码的项目:
http://sourceforge.net/projects/scope

scope 应用了一个改进的 mvc 框架:hmvc,也叫做 layered mvc,简单说
就是把应用程序分成好多层,每层就是一个 mvc 框架,由一个 controller
控制一个 model 和几个 view,各个层之间用 controller 互相通讯,整个
程序就像一个 controller 组成的树,每个 controller 带两个叶子:一个
model,一个或者多个 view。

关于 HMVC ,请看发表在 javaworld 的文章:
HMVC: The layered pattern for developing strong client tiers
http://www.javaworld.com/javaworld/jw-07-2000/jw-0721-hmvc.html

下面用一个简单的例子,来说明如何用 scope 开发 swing 程序。

目标:
显示一个窗口,让用户输入 name,然后在另一个窗口显示这个 name

程序框架:
  一个 controller :HelloController
  一个 model :HelloModel
  两个 view: InputView:输入窗口 ;OutputView:输出窗口
  启动程序:HelloLancher

我们一一说明:

1.HelloModel.java 最简单,就是一个 bean,一个属性 name 和 getName setName 方法

2.InputView.java 让用户输入 name 的窗口
  在构造方法里,有两个控件,一个 textfield ,一个 button
        STextField t = new STextField();
        t.setColumns(20);
        t.setSelector("name";
        t.setControlID(HelloController.GOT_NAME_CONTROL_ID);
        add(t, BorderLayout.EAST);

    这里的 setSelector() 方法把 textfield 的输入和 HelloModel 的 name 属性绑定在一起
    t.setControlID() 方法把 textfield 和 事件 GOT_NAME_CONTROL_ID 绑定起来
   
        SButton b = new SButton(HelloController.GOT_NAME_CONTROL_ID);

    Button 也和 事件 GOT_NAME_CONTROL_ID 绑定起来
    这样在 textfield 里按回车,点击 button 都会触发 GOT_NAME_CONTROL_ID 事件

3.HelloController.java 是整个程序的中心
  构造方法,设置这个 controller 的 model,view
    public HelloController(){
        setModel(new HelloModel());
        setView(new InputView());
    }
  startup 方法,controller 启动时会自动调用,显示 inputView,让用户输入 name
    public void startup(){
        showView();
    }
  当 InputView 里用户输入 name 点击 button 后,会触发一个 GOT_NAME_CONTROL_ID 事件,
  在 Controller 里定义这个事件,并在 doHandleControl 方法里集中处理这个事件:
    public static final String GOT_NAME_CONTROL_ID = "got_name";
    protected void doHandleControl(Control control) throws ControlException{
        if (control.matchesID(GOT_NAME_CONTROL_ID)){
            doGotName();
        }
    }
    protected void doGotName(){
        setView(new OutputView());
        showView();
    }
  收到 GOT_NAME_CONTROL_ID 事件后,controller 显示 OutputView,显示用户输入的 name

4.OutputView
  有一个 SLabel
        SLabel output = new SLabel();
        output.setSelector("name";
        add(output, BorderLayout.EAST);
  用来显示 name (HelloModel 里的 name)

5.HelloLancher 只有一个方法:main 用于启动程序。
        HelloController controller = new HelloController();
        controller.startup();
  其实就是启动 HelloController


程序的源代码可以从 ftp://210.52.88.133/pub/doc/code/scope/sample.zip 获得
hello 程序在 src/mine/simple 目录下。
用 ant run 可以看到运行结果

源程序中包含了 scope 自带的例子 ,在 src/samples 目录下
修改 build.xml 把 mine.simple.HelloLancher 替换成 samples.LaunchpadLauncher
重新运行 ant 即可。


程序用 ant 执行:
请参照下文配置 ant:
http://chinaunix.net/forum/viewtopic.php?t=15438
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP