用 Scope 框架开发 MVC 结构的 Swing 程序

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航