分享
 
 
 

用 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有