1、1.1 Eclipse 的简介 1.1.1 Eclipse 插件开发简介插件的概念读者应该很熟悉,象 MP3 播放软件 WINAMP 的皮肤插件、Windows Media Player 的众多的外观插件、音效插件等等。但如果你以为插件只能做成为原软件的边角料,那是可以理解的,因为你还没有看到过 Eclipse 的插件是什么样的。Eclipse 可以全面更新你对插件的概念,它也是对插件概念运用得最彻底最炉火纯青的一个软件。 在第一章我们就介绍了 Eclipse 的技术特点,Eclipse 的内核很小,其他功能都是基于这个内核上的插件,如 Eclipse 自带的 UNIT、ANT 等。而且 Ec
2、lipse 还开放了自己的插件机制,并提供了很好的插件开发环境,让用户可以自己来开发 Eclipse 的插件。想知道开发 Eclipse 的插件能到什么程度吗?看看这些 Eclipse 上的插件吧:用于 UML建模的 Together for Eclipse、用于 JSP 的 MyEclipse 和 Lomboz、IBM 的全能开发工具WSAD 等等,它们全是 Eclipse 的插件。如果微软愿意,也可以把 Office 软件做成Eclipse 的插件。如果 Adobe 有兴趣,Photoshop 也可以有 for Eclipse 的插件版,Eclipse 中的 API Draw2D 的绘图功
3、能也是很功的。 Eclipse 的各式插件正如雨后春笋般不断冒出,Eclipse 已经超越了开发环境的概念,它的目标是做成一个通用的平台,让尽量多的软件做为插件集成在上面,成为未来的集成的桌面环境。同样我们可以将我们的应用系统写成 Eclipse 插件,笔者就在 2004 年参与开发了一个项目管理软件,该软件就是以 Eclipse 的插件形式开发的。 1.1.2 Eclipse 插件开发的优势和不足那么将软件写成插件有什么好处呢?对于用户来说 Eclipse 的使用环境比较友好,前面介绍的 SWT/JFace 中还是比较基本的界面元素,象 Eclipse 中的视图、编辑窗、停泊窗这些界面如果实
4、现呢?如果用 Appliction 的方式会很麻烦,如果写成 Eclipse 插件则实现这些界面风格不会吹灰之力。可以说把软件开发成 Eclipse 插件的最大好处就是界面风格友好统一,如果用户较熟悉 Eclipse 操作的话这种优势就更明显。 当然将软件写成插件形式也有一定的缺陷。首先插件必须依附 Eclipse,如果要安装插件就得先安装 Eclipse。其次,插件和 Eclipse 融合在一起,原 Eclipse 的一些菜单和工具栏是无法完全屏蔽的。 1.2插件的 Hello World1.2.1使用向导一步步创建 HelloWorld我们利用 Eclipse 的“新建”向导来创建一个简单
5、的插件。 1、 新建一个插件项目 (1)选择主菜单“文件新建项目”,在弹出的窗口中(如图 5.1 所示)选择“插件开发”下的“插件项目”,然后单击“下一步”。 图 5.1 项目类型选择 (2)如图 5.2 所示,输入项目名“myplugin”,其他设置不变,然后单击“下一步”。图 5.2 项目名称 (3)在新显示的窗口中接受所有缺省值不变,直接单击“下一步”,这时将显示模板选择窗口(如图 5.3 所示)。勾选“使用其中一个模板来创建插件”项,然后选择模板“Hello,World”项。最后单击 “完成”结束向导对话框。 图 5.3 模板选择窗口 2、 插件项目 myplugin 简介 如果在新建
6、项目中操作正确,Eclipse 将显示如图 5.4 所示界面。 图 5.4 建立一个插件项目后的 Eclipse 界面 界面的左边视图中多了一个名为“myplugin”的项目。项目中有两个文件:MypluginPlugin.java、SampleAction.java。MypluginPlugin.java 较重要,今后将会使用到它,而 SampleAction.java 则是一个类似 JFace 中的 Action,可以把它看做是插件中的 Action,等会运行时我们将看到 SampleAction.java 的效果。 项目根目录下还有一个非常重要文件的 plugin.xml,这个文件是插件
7、的入口文件,Eclipse 是根据这个文件里的设置信息来加载插件的。在插件开发初期会频繁在这个文件中做编辑,术语叫“设置扩展点”。象在 Eclipse 的增加主菜单、视图、按钮等,都是在这个文件里面设置不同的扩展点,后面的将详细讲到如何编辑此文件。有人会问:开发一个系统会有很多的菜单和按钮,是不是都要在这个文件里设置呢?回答:不必。在 plugin.xml 里只设置和 Eclipse 接壤的主要扩展点,其他软件自有的菜单和按钮不用在 plugin.xml 设置了。图 5.4 的 Eclipse 界面中部显示的就是 plugin.xml 的设置窗口,单击该窗口下部的 plugin.xml 项后(
8、如图 5.5 所示),就可以直接编辑此文件。 图 5.5 plugin.xml 编辑窗下部的选项条 3、 运行插件 如图 5.6 所示,选择主菜单“运行运行方式运行工作平台”,这种是专用是插件的运行方式,它将打开一个新的 Eclipse 环境,并同时将插件项目编译加载到新的Eclipse 环境中。今后开发经常要通过这个方法来试运行所开发的插件项目,不过那时候选择“运行调试方式运行工作平台”以调试方式来运行插件会比较多,Eclipse支持调试期间的热修改,不用每次修改都新启一个 Eclipse,这样能节省很多调试开发时间。 新开的 Eclipse 界面如图 5.6 所示,在新的 Eclipse
9、环境中新增加了一个工具栏按钮和一个主菜单项。单击此按钮或菜单项,将弹出一个“Hello,Eclipse world”信息提示框。 图 5.6 myplugin 插件运行效果图 4、 总结 本节里我们还只是依样画葫芦,感觉有点云里雾里的吧。但不管怎么样,第一个Eclipse 插件已经在我们手里诞生了,下一节我们将不用 HelloWorld 模板来新建一个空白的插件项目,然后一步步的经过手工实现这个 Hello World 插件项目所拥有的功能。 1.2.2 以空白项目为基础手工创建 HelloWorld1、 新建项目 按照上一节所讲新建插件项目的方法,新建一个名为 myplugin2 的插件项目
10、。注意在最后一步不要选择任何模板,直接单击“完成”结束向导对话框,除此之外的其他步骤都一样。很幸运,Eclipse3.0 修正了很多 BUG,象以前用 Eclipse2.X 中文版时,在这一步还会出很多库引用的错误,要很麻烦的一个个去修正。 2、 创建 IWorkbenchWindowActionDelegate 接口的实现类 新建一个包 book.chapter_5,并将上一节中由 HelloWorld 模板生成的 myplugin 项目中的 SampleAction.java 文件复制到本项目中(Eclipse 支持鼠标拖拉操做)。然后对SampleAction 做了一些小修改:删除了无用
11、的注释和构造函数,修改了一下弹出框的提示文字,修改后的代码如下: /* * 本类相当于插件的 Action,要在 Eclipse 中增加主菜单或工具栏按钮, * 就需要写一个实现 IWorkbenchWindowActionDelegate 接口的类 */ public class SampleAction implements IWorkbenchWindowActionDelegate private IWorkbenchWindow window; public void run(IAction action) /打开一个信息提示框 MessageDialog.openInformati
12、on(window.getShell(), “Myplugin2 插件“, “Hello,这是手工做的插件 “); public void selectionChanged(IAction action, ISelection selection) public void dispose() public void init(IWorkbenchWindow window) this.window = window; 3、 原 plugin.xml 文件各设置项说明 如图 5.7 所示,将 plugin.xml 文件打开,并单击窗口下的“plugin.xml”项转到其代码编辑窗。 图 5.7
13、plugin.xml 的代码编辑窗 项详细介绍其中的各项设置如下: (1)项 说明:是 plugin.xml 的主体。 id 插件的唯一标识。实际项目中一般加上包名或网址名来命名 id,比如 eclipse的 tomcat 插件是这样命名的:org.eclipse.tomcat,这样在世界上就不会有插件的标识名和你重名了。以后在某些扩展点中的属性也会用到标识符作为名称的前缀。 name 插件的名称,可以不唯一。 version 插件版本号。 provider-name 插件开发商的名称,可以写上作者或公司的名称。 class 插件类的名称,即插件项目自动生成的 MypluginPlugin2.
14、java 文件的类,前面加上包名。 (2)项 说明:这里是声明插件运行时需要的 jar 包,比如插件要连接 MySQL 数据库需要它的一个包,如下定义,其中“lib”是该包所在路径。其中本插件自身的 jar 包也要声明,而且本插件在打包时将以 myplugin2.jar 为名打包。 (3) 项 说明:在 requires 域中定义了该插件所要使用的依赖插件。现在两项就够了,随着开发的不断深入这里将会添加更多对其它插件的引用。如下是笔者的实际项目中的requires 设置,它要用到 draw2d 和 gef 插件来画图、用于插件的帮助系统来创建建自己的帮助文档。 4、为 HelloWorld 修
15、改 plugin.xml 将如下代码加入到 plugin.xml 的“ ”行之后: 说明: 在项设置要扩展的扩展点,它是非常重要的一项。 point=“org.eclipse.ui.actionSets“,设置了本插件的扩展点为何,actionSets 是指 Eclipse 的菜单、菜单项和工具栏按钮的扩展点 项表示一个 action 组( 菜单、按钮)。label 是显示的名称。id 其唯一标识符,只要保证在本 plugin.xml 文件中不存在重复的 id 就行了。visible 指设置的按钮或菜单是否显示,如果设置成 false,则不显示。注意:要看 visible 设置的效果要将“透视
16、图”关掉再重新打开。 是下的子项,它表示在 Eclipse 中插入显示一个名为“样本菜单(M) ”的主菜单。 separator 标签是一个结束符,它可以对菜单分组。 也是下的子项,由它设置菜单、按钮。icon 是图片的路径,如果该图片不存,默认是一个红色实心小框(Eclipse2.X)或不显示图片而显示文字(Eclipse3.X) 。Class 是按钮所对应的类,注意包名也要加上。menubarPath 表示把这个 action 做成一个菜单项放在上前定义的主菜单下。toolbarPath 表示把这个action 再做成一个工具栏按钮。id 是标识符,设置成和 class 项一样的名称是个不
17、错的选择。 以上仅是 Eclipse 的扩展点中的一种,此外还有其它的扩展点共有一百多种之多。我们没有必要了解所有扩展点的设置,只须熟悉一些常用的扩展点即可,如视图的扩展点org.eclipse.ui.views、编辑器的扩展点 org.eclipse.ui.editors 等,本书将陆续给于介绍。另外,各种扩展点在 Eclipse 的帮助中有详细的说明,其位置为:选择主菜单“帮助帮助内容”,然后打开“平台插件开发指南参考扩展点参考”项。 5、运行插件 按上一节(5.2.1 节)所说的方法运行插件(运行之前不妨将上节所建的 myplugin 项目关闭掉,关闭方法:右键单击 myplugin 项
18、目名,然后在弹出菜单中选择“关闭项目”)。myplugin2 插件的效果如图 5.8 所示 图 5.8 myplugin2 插件运行效果图 5.3 常用插件扩展点实战(plugin.xml)在上一节(5.2.2 节)已经对原有的 plugin.xml 做了很详尽的介绍,plugin.xml 是插件和 Eclipse 的接口,Eclipse 就象一所大宅子,它的外墙(plugin.xml)有很多的门(扩展点) ,我们要熟练进出这座大宅子,先得搞清楚它有哪些门,当然我们只需要熟悉一些主要的门就足够应付 90%的需求了。本节将以开发需求为导向来介绍这些扩展点,并且本节所有实例都在 5.2.2 节所建
19、立的 myplugin2 项目的基础上来进行讲解演示。5.3.1 加入透视图(perspectives)往开发一个插件,最常用的方式就是新增一个属于本插件专有的透视图,然后在此透视图基础上来展开软件开发,本书即采用这种方式。1、准 备 工作我们先将以前用到的那些图标的 icons 目录复制一份到 myplugin2 项目中,复制后的路径如图 5.9 所示:图 5.9 图标的路径2、修改 plugin.xml文件,设置透视图的扩展点打开 plugin.xml 文件的编辑框,将如下代码块插入到最后一行的之前:说明: org.eclipse.ui.perspectives 是透视图的扩展点 name
20、 透视图的名称 icon 透视图的图标 class 透视图所对应的类(我们还没编写,下一步将完成此类) id 透视图标识,建议设置成和 class 一样的名称,省得以后扩展点设置得太多,搞得人糊涂。3、建立透视图类在上一步的 plugin.xml 中提前设置了透视图对应的类book.chapter_5.SamplePerspective,这一步我们就来在包book.chapter_5 中创建此类。透视图的类必须实现IPerspectiveFactory 接口,此接口只有一个方法createInitialLayout,我们让它先空实现好了。SamplePerspective 代码如下:/-文件名
21、:SamplePerspective.java-public class SamplePerspective implements IPerspectiveFactory public void createInitialLayout(IPageLayout layout) 4、运行插件按以前所说的方法运行插件后,在新开的 Eclipse 环境中选择主菜单“窗口打开透视图其它” 。在弹出如图 5.10 的透视图选择窗口中,我们可以看到一个名为“myplugin 透视图”的项。图 5.10 选择透视图选择并打开“myplugin 透视图”项后,显示如图 5.11 的 Eclipse 界面。我们发
22、现该透视图光秃秃的什么也没有。没关系,我们下一小节就会往这个透视图加入两个视图。图 5.10 myplugin 透视图的效果图5、总结由本小节可以看到在 Eclipse 创建一个界面(菜单、按钮、透视图)是多么的简单,我们都不用编写实际界面的创建代码,只要设置一些扩展点就行了。第 6 章 SWT 概述在这一章里将把 SWT 和 AWT/SWING 做了简单的比较,并以一个 HelloWorld 的 Java应用程序(Application)作为起步,让读者可以快速建立对 SWT/JFace 的感性认识。在这一章里所有的例子都是以 Java 应用程序方式来写的,之所以如此,是因为 Java应用程
23、序代码简洁,且可以独立运行,便于讲解和示范。当然,这些例子的代码方法同样适用于 Eclipse 的插件开发,SWT/JFace 在 Java 应用程序和 Eclipse 插件开发中的使用是没有太多区别的。6.1 SWT 简介2003 年,笔者对 SWT/JFace(英文全称:Standard Widget Toolkit)还是仅有耳闻,知道在 AWT/Swing 之外,又有了一个新的图形 API 包,听说还很不错,当时书店里根本没有相关资料,只能在网上找到一些零星的文章来了解。2004 年前,笔者还极少用 Java 来写 GUI 程序(GUI 全称: Graphical User Interf
24、aces,图形用户界面),主要的工作都是用 JSP 来写网页。用 JAVA 来开发大型的 GUI 程序实在很困难的事,大都丑陋又笨重(慢),SUN 在 GUI 方向上的失败是公认的事实。失败关键之处在于 Java 的图形 API 包 AWT/SWING 在速度和外观上都不能让人满意,外观总是和同操作系统平台下的其他软件格格不入,对机器配置的需求也似乎永无止境。2004 年初,笔者有幸参与到一个用 Eclipse 插件方式来开发的软件项目中,该软件使用到了 SWT/JFace,那界面实在是太酷太漂亮了,让人为之耳目一新,而且界面响应速度极快,这真的是用 Java 开发的吗?当时竟然有点不敢相信。
25、无疑,SWT/JFace 象一股清新的风吹入了 Java 的 GUI 开发领域,为这个沉闷的领域带来了勃勃生机。虽然 SUN 不接纳 SWT/JFace 作为 Java 中的一种图形 API 标准,但它虽然借着 Eclipse 的优异表现,以不可阻挡之势向前发展着。终于可以用 SWT 轻松的开发出高效率的 GUI 程序,且拥有标准的 Windows 外观,Eclipse 软件就是基于SWT/JFace 构建的,大家看看 Eclipse3.0 就知道 SWT 有多么的棒。图 6.1 SWT、JFace、GUI 程序三者关系示意图如上图 6.1,为了方便开发 SWT 程序,在 SWT 基础上又创建
26、了一个更易用、功能强大的图形包“JFace”。然而,JFace 并不能完全覆盖 SWT 的所有功能,所以编程时SWT、JFace 都会要用到,但是一般来说,能用 JFace 的组件就最好不要用 SWT 的。6.2 SWT 中的包SWT 是 Eclipse 图形 API 的基础,本节将简单介绍一下 SWT 中所包含的子包。1、org.eclipse.swt.widgets最常用的组件基本都在此包中,如 Button、Text、Label 、 Combo 等。其中两个最重要的组件当数 Shell 和 Composite:Shell 相当于应用程序的主窗口; Composite 相当于SWING 中
27、的 Panel 对象,是容纳组件的容器。2、org.eclipse.swt.layout主要的界面布局方式在此包中。SWT 对组件的布局也采用了 AWT/SWING 中的Layout 和 Layout Data 结合的方式。3、org.eclipse.swt.custom对一些基本图形组件的扩展在此包中,比如其中的 CLabel 就是对标准 Label 组件的扩展,在 CLabel 上可以同时加入文字和图片。在此包中还有一个新的布局方式StackLayout。4、org.eclipse.swt.eventSWT 采用了和 AWT/SWING 一样的事件模型,在包中可以找到事件监听类和相应的事件
28、对象。比如,鼠标事件监听器 MouseListener,MouseMoveListener 等,及对应的事件对象 MouseEvent。5、org.eclipse.swt.graphics此包中包含针对图片、光标、字体或绘图 API。比如,可通过 Image 类调用系统中不同类型的图片文件。6、org.eclipse.swt.ole.win32对不同平台,SWT 有一些针对性的 API。例如,在 Windows 平台,可以通过此包很容易的调用 OLE 组件,这使得 SWT 程序也可以内嵌 IE 浏览器或 Word、Excel 等程序。此外还有org.eclipse.swt.dnd、org.ec
29、lipse.swt.printing、org.eclipse.swt.program、org.eclipse.swt.accessibility、org.eclipse.swt.browser、org.eclipse.swt.awt 等包,在此不一一介绍了。这些包一般很少用到,只需要稍微了解一下就行了,不必深究。6.3 用 SWT Designer 写一个 Hello WorldSWT Designer 是优秀的 SWT/JFace 开发辅助工具,本书大都 SWT/JFace 的例子都是使用它来生成代码后,再进行修改而成。当然,SWT Designer 并非是阅读和运行这些例子的必须条件。本节
30、将用 SWT Designer 来写出第一个基于 SWT 的 HelloWorld 程序,以此给读者演示在开发中是如何使用 SWT Designer 的。6.3.1 使用用向导建立一个 SWT/JFace Java 项目(1)选择主菜单“文件新建项目”,弹出如下图 6.2 所示窗口。图 6.2 新建项目窗口(2)选择“Designer”下的“ SWT/JFace Java Project”项,单击“下一步”,弹出如下图 6.3 所示窗口。图 6.3 创建 Java 项目窗口(3)填写项目名称“myswt” ,项目布局选择第二个,单击“完成”。这时如果打开“java”透视图,可以看到多了一个名为
31、“myswt ”的项目,下方还排列着很多库引用,如下图 6.4 所示窗口。图 6.4 “java”透视图注:(1)其实写 SWT 程序也不是一定要重新建立这样一个新的项目,原来老的“myproject”项目依然可以继续使用的,但必 须将SWT、JFace 包及一些相关的包引用到 Java 构建路径中,手工一步步做这个工作太过于繁锁。有一个简单的方法:借助 SWT Designer 新建项目时保存在.classpath 文件中的库引用,将其复制粘贴到 myproject 的.classpath 中即可。(2)当编写 Java 程序时,笔者认为“Java”透视图要比默认的“资源”透视图好用,主要是
32、因为前者的包显示不是树状的,用起来 较方便。但选择哪一种透视图,还是要看各人的习惯和喜好。本书以后的所讲内容将统一使用“Java ”透视图。6.3.2 导入 SWT 的原生库想要运行 Java 应用程序,必须将 SWT 的原生包导入到项目中,否则该项目在运行程序时会报异常“java.lang.UnsatisfiedLinkError: no swt-win32-3063 in java.library.path ”,并弹出图 6.5 所示的错误提示框。图 6.5 未导入 SWT 原生包时产生的错误提示框导入 SWT 原生包的步骤如下:(1)右键单击项目名“myswt”,在弹出菜单中选择“导入”
33、,则会弹出如图 6.6 所示窗口。图 6.6 导入窗口(2)选择“文件系统”后单击“下一步”,转到如图 6.7 所示窗口图 6.7 选择导入文件(3)通过“浏览”按钮找到 SWT 原生库的路径(也可以直接输入路径文字),路径为“C:eclipsepluginsorg.eclipse.swt.win32_3.0.1oswin32x86”。然后将“swt-win32-3063.dll”选上,单击“完成”,导入 SWT 原生包的设置结束。6.3.3 新建一个 SWT 类文件参阅“4.2 节 创建 Java 项目并运行”所讲方法,新建一个类文件。(1)在“Java”透视图的“包资源管理器”中,右键单击
34、 “com.swtdesigner”包,在弹出菜单中选择“新建其他”,弹出如图 6.8 所示窗口。图 6.8 选择新建的类型(2)选择“DesignerSWTApplication Window”,单击“下一步”,弹出如图 6.9所示窗口。图 6.9 类文件的设置(3)类的名称填“HelloWorld ”,并选择“Create contents in(类代码的生成方式)”为第三项“public static main() method”(第三项生成的代码结构最简单),弹击“完成”。Eclipse 将自动生成 HelloWorld.java 的代码,代码如下(注释为笔者手工加入):package
35、 com.swtdesigner; /包名import org.eclipse.swt.widgets.Display;/程序所用到的类都会用 import 标记在这里,import org.eclipse.swt.widgets.Shell; /import 的快捷键 Ctrl+Shift+Opublic class HelloWorld /一个标准的 Java 类HelloWorldpublic static void main(String args) /display 负责管理事件循环和控制 UI 线程和其他线程之间的通讯。final Display display = Display
36、.getDefault(); final Shell shell = new Shell(); / shell 是程序的主窗口shell.setSize(327, 253); /设置主窗口的大小shell.setText(“SWT Application“); /设置主窗口的标题shell.layout(); /shell 应用界面布置shell.open(); /打开 shell 主窗口while (!shell.isDisposed() /如果主窗口没有关闭,则一直循环if (!display.readAndDispatch() /如果 display不忙display.sleep();
37、/display 休眠从这个代码可以看到,创建一个典型的 SWT 应用程序需要以下步骤: 创建一个 Display 创建一个或多个 Shell 设置 Shell 的布局(3.5 节将讲到布局的内容) 创建 Shell 中的的组件(注:本例还没有加入组件,只是一个空窗口) 用 open()方法打开 Shell 窗口 写一个事件转发循环 销毁 display6.3.4 在主窗口加入一个文本框组件如果运行 HelloWorld.java,它还仅是一个空荡荡的主窗口。我们利用 SWT Designer 将一个 SWT 的文本框组件加入到主窗口中,操作步骤如图 6.10 所示。图 6.10 将文本框加入
38、到主窗口的操作示意图图中所示的操作步骤用文字描述如下:(1)先将编辑器最大化。然后单击 Eclipse 的左下角的“Design”选项页,则编辑器由代码视图变成设计视图。(2)选择 SWT 组件栏中“SWT Controls”分类下的“ Text”组件,然后在主窗口上单击,将 Text 框放入。注意这里不是通常的将组件拖入到窗口。(3)转到属性窗口,在“text”项里填写“HelloWorld”。单击 Eclipse 左下角的“Source”返回到编辑器的代码视图,代码如下:package com.swtdesigner;import org.eclipse.swt.widgets.Displ
39、ay;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.Text;public class HelloWorld public static void main(String args) final Display display = Display.getDefault();final Shell shell = new Shell();shell.setSize(327, 253);shell.setText(“SWT Application“);/-
40、新插入的界面核心代码-Text text = new Text(shell, SWT.BORDER); /新建一个 text 对象text.setText(“HelloWorld“); /给 text 文本框设置初始文字 HelloWorldtext.setBounds(88, 94, 100, 25); /设置文本框的位置和大小,(x 轴坐标,y 轴坐标,宽度,高度)/-END-shell.layout();shell.open();while (!shell.isDisposed() if (!display.readAndDispatch()display.sleep(); 6.3.5
41、运行 HelloWorld.java选择主菜单“运行运行方式Java 应用程序”,运行界面如图 6.11 所示:图 6.11 HelloWorld 的第一次运行界面以上的程序例子还是比较简单的,如图 6.12 所示,给出一个稍微标准些的界面,并给出了各类和界面之间的对应关系。注:在 SWT 中 check 框(复选框)也是一种Button。图 6.12 界面和类之间的对应关系图其中 Display 和 Shell 的谱系图如图 6.13 所示,Group 和 Button 在 3.3 节有介绍。图 6.13 Display 和 Shell 的谱系图6.4 关于 SWT/JFace 例程的说明由
42、于 SWT/JFace 应用程序例子的整体代码结构都基本一样,如下:package com.swtdesigner;import org.eclipse.swt.widgets.Display;import org.eclipse.swt.widgets.Shell;import org.eclipse.swt.SWT;import org.eclipse.swt.widgets.Text;public class HelloWorld public static void main(String args) final Display display = Display.getDefault
43、();final Shell shell = new Shell();shell.setSize(327, 253);shell.setText(“SWT Application“);/-新插入的界面核心代码- /-END-shell.layout();shell.open();while (!shell.isDisposed() if (!display.readAndDispatch()display.sleep();为了节省篇幅,以后的例子一般都会省略上面代码框架前后部份,只给出中间省略号处的核心代码,要想得到完整的代码请查阅本书随书光盘中的例程。6.5 实践建议SWT Designer
44、 还无法完成所有的界面设计工作,所以在界面开发中依然是以手工写代码为主,而且手写代码某些时候比界面拖拉操作更快捷。以下是笔者在使用 SWT Designer 开发界面时的基本流程: 新开一个临时的 Application 文件,用 SWT Desiger快速做好开发所需要的部份界面。 将自动生成的代码移植到正式项目中,进行手工修改和代码精简。另外,由于 SWT Designer 不是很稳定,所以在使用时还应注意: 不要在界面中加入太多组件。 不要频繁的移动组件,或者删除又添加组件,否则很可能因为内存耗尽而死机。6.6 本章小结本章主要介绍了 SWT 的一些基本知识,并且用 SWT Design
45、er 开发出了本书的第一个SWT 程序。通过这章的学习,读者对 SWT 有一个初步的认识,并了解到了如何用SWT Designer 来开发 SWT 程序。第 7 章 SWT/JFace 的事件模型7.1 事件的四种写法SWT 的事件模型是和 Java 标准的 AWT 基本一样的。在第 6 章的例子中,如何来实现文本框的事件响应呢?比如:鼠标双击文本框弹出一个对话框。下面将按照事件的四种写法来实现它。7.1.1 匿名内部类写法在原来的代码行“text = new Text(shell, SWT.BORDER);”之下插入如下语句:/addMouseListener 加入鼠标事件的监听器text.addMouseListener(new MouseAdapter() public void mouseDoubleClick(MouseEvent e) /鼠标双击事件的方法/打开一个信息框MessageDialog.openInformation (null,“,“Hello World“);