今日更新
技术新闻
精彩专题
IBM软件技术专区
微软开发专区
技术文档中心
编程语言
网络通信
网络安全
LINUX/UNIX
软件工程与管理
数据库开发
WEB开发
企业应用与开发
移动开发
资源中心
原创专栏
开放系统世界
人才与培训
技术天地论坛
厂商列表
社区推荐

· 女性身体内部人体受孕..
· 十部顶级的变态与情色..
· 感情放纵让我毁了两个..
· 当我撞见姐姐和男友在..
· 卖淫少女惨遭泄愤民工..
· 偷拍街上的走光mm绝对..
· 百度打击google的广告
· 港娱乐圈与黑社会揭秘
赛迪网>>技术应用>>上首页
关键字: SWT代码 AWT/Swing
来  源: Matrix
SWT代码研究
作者:skyhit 发文时间:2004.05.17
SWT(Standard Widget Toolkit)是一个开源的GUI编程框架,与AWT/Swing有相似的用处,著名的开源IDE-eclipse就是用SWT开发的,如果你想了解SWT与AWT/Swing之间的区别,请查阅相关文章。

SWT的整个源代码你可以从www.eclipse.org上下载,为了便于阅读源代码,你可以借助源代码阅读工具,Source Insight是个不错的选择。

一、代码的主要结构功能划分

1、org.eclipse.swt下有SWT,SWTException和SWTError类,提供了SWT常量与对异常处理的支持,SWT在构造窗口组件和事件处理中有很大的用途;
2、org.eclipse.swt.widgets包下是常用、核心SWT窗口小部件(widget)的公有API类定义所在。如Display、Shell、Button、Menu等。我们一般编写GUI程序用这些Widget就可以了;
3、org.eclipse.swt.events包中提供了对SWT事件监视器(Event Listener)的支持,如Button的SelectionListener,Mouse的MouseListener、MouseMoveListener和MouseTrackListener等等,还有与这些对应Listener的默认Adapter实现类和Event类。
4、org.eclipse.swt.layout包中是控制GUI程序Layout的类所在(当然包括了相关的结构数据类),其中有FillLayout、GridLayout和RowLayout三种;
5、org.eclipse.swt.graphics包中包含了SWT中graphic类,如Color、Font和Image等;
6、org.eclipse.swt.printer提供了对打印服务的支持;
7、org.eclipse.swt.ole.win32提供了SWT中Win32 OLE实现的一些类;
8、org.eclipse.swt.custom包中包含了一些可自定义的窗口小部件,对于开发复杂的GUI程序,非常有帮助;
9、org.eclipse.swt.dnd提供了对拖放(Drag and Drop)的支持.

注意对一般的GUI编程,org.eclipse.swt.widgets,org.eclipse.swt.events和org.eclipse.swt.layout三个package是最基本、最重要的。

二、SWT代码研究

import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class SWTHello {
public static void main(String[] args) {
/*
* Display的实例用于管理SWT与底层操作系统的连接,其
* 最重要的功能是根据平台的事件处理模型实现SWT的event
* loop,一般来说,只要一个Display的实例就可以了。
* 注意,在创建任何window前(Shell实例)需创建Display实例,
* 在Shell实例关闭时除掉Display实例
*/
Display display = new Display();


/*
*Shell是作为主窗口 
*/
Shell shell = new Shell(display);
/*
* SWT.NONE是Sytle bit,用于表明widget的style
*/
Label label = new Label(shell,SWT.NONE);
label.setText("Hello");
shell.pack();
label.pack();
shell.open();
while(!shell.isDisposed())
{
if(!display.readAndDispatch())
display.sleep();
}
shell.dispose();
}
}


关于Resource的Disposal

1、如果你用构造函数创建了widget或者graphic对象,当你不需要时你必须手动地dispose掉它;
2、如果你不是使用构造函数得到这个widget或者graphic对象,由于不是你allocate的,你不需要手动来dispose掉它;
3、如果你传递一个widget或者graphic对象的reference给另一个对象,那么你必须小心,不要在它仍在被使用中就dispose掉它;
4、当你close掉一个shell,那么这个shell及其子widget会被递归dispose掉的,虽然你不需再dispose掉那些widget,但是你必须free掉与这些widget相关的图像资源;
5、如果在一个widget的生命期中创建了graphic对象,可以通过注册一个dispose listener来free这个graphic对象,不过数据对象如Rectangle和Point没有使用操作系统资源,不用手动dispose(它们也没有dispose方法).

(责任编辑:代君利)




赛迪网推出“IT博客”,花不到一分钟就完成注册
评论】 【推荐】 【 】 【打印】 【关闭

·Linux专区· ·黑客攻防·
· Linux下添加硬盘、分区、格式化任务详解
· FreeBSD服务器的安装与优化之优化篇
· 初学者入门:FreeBSD服务器的安装与优化
· 金企鹅杯两岸四地开源软件大赛圆满结束
· 如何提高Linux系统安全性的十大招数
· 构筑Linux防火墙之为个人用户设置防火墙
· 谁更安全?黑客眼中的防火墙与路由器
· 识破骗局 练就识别QQ活动真伪火眼金睛
· 应用安全大有可为:目的、挑战、总结
· 道高一尺魔高一丈:安全防御的动感魅力
· 警惕网络“内”院起火 积极谋求安内之路
· HHCTRL漏洞被黑客利用 疯狂传播木马
·中国信息化· ·成功案例·
· ERP普及化是饮鸩止渴 精细化才是应用之道
· 赛门铁克第八期《互联网安全威胁报告》解析
· 抢食“数字工商” 国产中间件杀出血路
· 从IBM等操作系统的发展看软件创新的启示
· 服务成就蓝色快车 品牌是怎样炼成的?
· 三大技术应用大会合为一体甲骨文上演三重奏
· 南阳教育城域网 拆掉学校间的“围墙”
· 金算盘助申意美步入信息化快车道
· 不为人知的索尼信息化 谁是幕后英雄?
· InforBus/Q在穗高速路联网收费系统中的应用
· J2EE构建最新金融理念和运作模式的网上银行
· 食品安全令人担心 信息化能否保驾护航
*姓  名: 更多资料 了解方案 认识厂商
*单位名称:
*联系电话:
*电子邮件:
    
◆ 相关文章   ◆ 站内热点推荐
· 网管员论坛
· 开发者之家
· WLAN无限未来
· 我是如何掉进C#的……
· 中国“人件”非正式调查

   
合作网站: IBM dW中国网站 LinuxAID 软件工程专家网 中国系统分析员 UMLChina MATRIX Mobile2008 JavaResearch 华储网 UML软件工程组织 中国JAVA手机网 JAVA中文站 金山在线 海量科技