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代码研究
关于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方法). |