神兵利器eclipse开发技术详解_第1页
神兵利器eclipse开发技术详解_第2页
神兵利器eclipse开发技术详解_第3页
神兵利器eclipse开发技术详解_第4页
神兵利器eclipse开发技术详解_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 4 章SWT 组件本章讲解 SWT 的基本概念和特性,读者需要了解基本界面元素的特性,通过容器的概念掌握界面元工作。间的互相关系与组件的体系结构,并掌握用其进行程序开发需要准备的前期本章学习重点:了解 SWT 的基本概念掌握在 Eclipse 环境下如何开发 SWT 程序熟悉常用的 SWT 组件熟悉常用的 SWT 容器综合使用 SWT 进行桌面程序 GUI 的开发4.1SWT 简介SWT(Standard Widget Toolkit)本身仅仅是 Sun 公司为了开发 Eclipse IDE 环境所编写的一组底层图形界面 API。它是跨GUI(图形用户界面)开发工具包,无论是在性能上还是在

2、外观上,都了之前的 AWT 和 Swing。AWT(Abstract Windowing Toolkit)是 Sun 公司开发的一个跨GUI 开发工具包。它一直未能突破 LCD 问题,所以之后 Sun 为了补救,又创建了一个新的框架 Swing。这个框架虽然提供了丰富的窗口部件集,并且使用仿真窗口部件(emulated widgets)解决了 LCD 问题,但也带来了新的问题。例如,Swing 应用程序的界面外观和原应用程序的外观不再相似,导致以前使用的 Java 桌面程序与系统上的其他程序看起来格格不入,并且会消耗太多的内存,不适于一些小设备,如PDA 和移动等。IBM 努力尝试以彻底解决

3、AWT 和 Swing 框架带来的上述问题,最终,创建了一个新的 GUI说 明LCD(Liquid Crystal Display),中文意思是液晶显示器。第 4 章SWT 组件库,这就是 SWT。这个框架通过 JNI(Java Nativeerface,它允许 Java 代码和其他语言写的代码进行交互)来宿主操作系统中的资源。如果在宿主上无法找到一个窗口部件,框架就会自动地模拟它。4.1.1概述Eclipse 将 SWT 描述为一种“与本地窗口系统结合但与操作系统无关的 API 窗口小部件集及图形库”。目前随着 Eclipse 的逐渐开发,SWT 已经十分稳定。这里的稳定首先是指性能上的稳定

4、,只要操作系统提供了相应图形的构件,那么 SWT 便会简单应用 JNI 技术调用它们,只有那些操作系统中不提供的构件,才会进行模拟的实现。可以看出 SWT 性能上的稳定性大多取决于相应操作系统图形构件的稳定性。其次稳定是指 API 包中的类、方法的名称和结构已经少有改变,程序员不用担心由于 Eclipse 组织开发进度很快,而导致自己的程序代码变化过大。从一个版本更新至另一版本,通常只需简单将包换掉就即可。SWT 在功能上与 AWT/SWING 十分类似,但是组件更为丰富,而且解决了许多稳定性的问题。如果应用程序需要跨运行,而且需要保证性能与美观,且不要依赖 AWT/SWING 的话,SWT

5、是一个非常好的选择。4.1.2基本特性类“Widget”(窗口小部件)包括了 SWT 中的所有控件,其基类包括:“Control”(控制)、“”(菜单)、“ScrollBar”(滚动条)、“Item”(项)等,如图 4-1 所示为“Widget”的类图。ltemButtonLabelProgressBarScrollableltemTreeltemBrowserCoolBarGroupTableTree图 4-1Widget 类图“Widget”的子类“Control”是一个比较庞大的基类,大部分部件都在此类下,其直接子类有“Button”(按钮)、“Label”(标记)、“ProgressB

6、ar”(进度条)等。“Control”的子类“Scrollable”是所有可以带滚动条的对象的基类,比如“Text”(文本框)、“List”(列表框)等。“Scrollable”的子类“Comite”是 SWT 中一个重要的类,是所有可容纳其他部件的类的基类,其子类有“Browser”(浏览器)、“Group”(组合框)、“Table”(表格)、“Tree”(树)等。91ComiteTextListTableIterScrollBarControlWidget第 2 篇SWT 应用“Widget”的基类“Item”下是一些无法独立于其他部件的部件,比如“项)、“TableItem”(表格项)、

7、“TreeItem”(树项)等。Item”(菜单以上是 SWT 所含有的基本实体控件,但是在要想创建一个窗口,至少要用到两个类:“Display”和“S”。“Display”类起管理者的作用,负责处理所有“Widget”和操作系统之间的交互,比如可以通过其内部的方法来查询操作系统:哪个控件获取了焦点,当前打开了哪些窗口,等等。“S口可以创建其他的”实例提供了真正可见的窗口。该窗口一般作为主窗口使用,如果主窗框,这时会产生不同的实例,这个新建的框应当作为主窗口实例的子对象。从这点可以知道,“S”实例可以直接从“Display”创建,也可以从父代创建。4.2SWT 程序在 Eclipse 编程环境

8、中编写 SWT 程序首先需要引入相关的依赖包。方式已经面介绍过了,软件内部自带了 SWT 的 JAR 文件,同时也可以到获得相关内容。4.2.1加入 SWT 依赖包通过 Eclipse 新建一个 Java 工程之后,就可以通过配置工程的属性来添加新的依赖目录。一般配置的原理就是为当前工程配置一个新的 Classpath,这样在以找到相应的名字空间了。(1)右击项目头部,选择“Properties”菜单,如图 4-2 所示。SWT 内容的时候,就可(2)单击 Properties 命令,弹出“Java Build Path”框,如图 4-3 所示,单击其中的“AddJARs ” 按钮就可以进入浏

9、览器菜单。 通过浏览器去寻找 SWT 的 JAR包,名字是“.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar”。图 4-2配置 SWT 工程图 4-3Java Build Path(3)Eclipse 的界面程序是基于 JFace 写成的,而 JFace 就是 SWT 的一个扩展。所以,要想92第 4 章SWT 组件找到 SWT 的 JAR 文件,就需要在 Eclipse 安装目录下的 plugins 文件夹下寻找。找到之后双击文件,就完成了加入 SWT 的依赖包的任务,效果如图 4-4 所示。除了在 Eclipse 中寻找默认的安装包以外,还有另一种

10、获图 4-4成功加入依赖得 SWT 工具包的方法,就是Eclipse 中的 SWT 的“首页如图 4-5 所示。”,在这里可以找到最新发布信息,版本介绍以及源代码等。图 4-5SWT在上可以选择SWT 的开发包以及源文件。Eclipse会根据机器的 IP选择最近的镜像来提供,如图 4-6 所示。图 4-6SWT前面的简介中提到过,SWT 虽然是用 Java 实现的,但是并没有脱离无关性,图 4-7所示为 SWT 在不同操作系统中运行的效果。正是其依赖性才使得 SWT 的显示效果要高于AWT 和 SWING。从图中可以看到,对于不同的系统,所展现出的界面效果的差异相当大。4.2.2 “o wor

11、ld”程序首先从最典型的“oWorld”程序开始逐渐讲解 SWT 的程序结构,了解什么是“Display”和“S”对象。在工程“swt”中建立一个“oWorld”类。这里在类配置模板中勾选“生成 main 函数”复选框。在图 4-8 中单击“Finish”按钮之后就可以进行程序的编写了。93第 2 篇SWT 应用图 4-7各种 SWT 页面图 4-8生成oWorld 类在oWorld 类中简单地添加部分代码,实现在一个框中显示o World 并且输出一个图标。运行结果如图 4-9 所示。以下是类中的代码:图 4-9o World94import.eclipse.swt.*;import.ecl

12、ipse.swt.custom.CLabel; import.eclipse.swt.widgets.*;public classoWorld public sic void main(String args) /程序主方法Display dipl = new Display ();/创建 Display 对象 diplSshl= new S(dipl);/创建前面 Display 对象的 S对象 shl shl.setText(SWT);shl.setImage(dipl.getSystemImage(SWT.ICON QUESTION); CLabel lbl = new CLabel (

13、shl,SWT.LEFT);/创建 Label 对象 lbl.setImage(dipl.getSystemImage(SWT.ICON INFORMATION); lbl.setText(o Worldn);/创建 Label 显示的文字 lbl.pack();shl.pack();shl.open();while(!shl.isDised()/销毁资源第 4 章SWT 组件下面逐行解释代码并介绍相关内容。首先一个“Display”类,用于直接调用当前系统资源的对象,它封装了部分相关的方法。但是只有“Display”对象是不能显示出窗口的,还需要创建窗口对象“S”。它的概念和 Visual

14、C+中的“Window”以及和 VC#中的“Form”的概念类似。根据层次关系,“S”对象要在“Display”对象下面创建,一个“Display”可以被多个“S”调用。考虑到实际用”,并且指向同一个到的软件出现的多窗口应用的情况,每个窗口都应当“Display”。为一个“SDi s p l a y d i p l = n ew Di s p l a y () ; ./ /创建D i s p l a y 对象 d i p l/ /创建前面D i s p l a y 对象的 SSs h l = n ew S( d i p l ) ;对象 s h l程序对于“S”的某些属性进行了定义与修改。这里简

15、单给窗口定义了一个标题“SWT”,之后又定义了一个图标。前面“S”对象添加到“Display”中,之后应当做的是为其添加各种小窗口部件(Widget)。这种层级的对应关系也是一对多的。为了显示“o World”,程序中使用了 Label 控件,并且是 Label 的升级控件,CLabel。一般的 Label 对象只可以显示文字或者文本,而 CLabel 可以二者同时显示。初始化控件的时候,必须要依托一个“S”对象。在初始化的构造函数的第二个参数“SWT.LEFT”表示这个控件中的内容是采用左对齐的对齐方式。接下来继续在控件中设置属性。后面要做的工作就是显示这个窗口了,在显示之前需调整每个对象中

16、包含的元素的布局,可以使用 pack()方法。该方法的作用是,发送调整信息,调整所有的接收者的大小,回到各自的首选尺寸。所谓的接收者就是调用该方法的对象。该方法可以添加型参数,如果参数为“true”,表示小窗口部件(Widget)会采用其正常的大小,而且会尽可能靠左对齐,如果参数为“false”,小窗口部件会填充可用的空间。一般会在 SWT 的布局函数中使用 pack()方法。95l b l . p ac k () ;s h l . p ac k () ;/ /调整布局s h l . op e n () ;/ /打开窗口l b l . s e t Ima g e ( d i p l . g e

17、 t Sy s t emIma g e ( SWT . ICON INFORMAT ION ) ;/ /设置 l a b e l 显示的,使用系统默认的l b l . s e t Te x t ( o Wo r l d n ) ;/ /设置l a b e l 显示的文字CLa b e l l b l = n ew CLa b e l ( s h l , SWT .LEFT ) ;/ /在 s h l 对象中初始化一个新的 l a b e l 控件s h l . s e t Te x t ( SWT );/ /为框设置标题s h l . s e t Ima g e ( d i p l . g e

18、 t Sy s t emIma g e ( SWT . ICON QUEST ION ) ;/ /为框设置图标,这里采用的是系统默认图标,是从 SWT 调用的系统默认资源中的,也可使用自定义图标i f ( d i p l . r ea dAndDi s p a t c h () d i p l . s l ee p () ;d i p l . d i se () ;第 2 篇SWT 应用运行到这里,整个程序就算基本完成了,后面关闭窗口进行资源销毁工作。代码如下:Java 也使用类似 Windows 程序设计中消息循环的方法来处理事件。这段代码的意义就是反复和分派(dispatch)事件,并在没

19、有事件的时候把控制权还给 CPU。这里可以看到很清晰的 SWT 程序的编写步骤:创建“Display”对象。描述“Display”对象。为“Display”添加“S描述“S”对象。”对象。(5)为“S”对象添加各种“Widget”(窗口部件)。描述各个部件的属性,协同关系以及和上层“S调整布局。显示窗口。”的关系。4.2.3运行 SWT 应用当程序中了 SWT 包之后,选择“Run As”“SWT Application”命令,如图 4-10 所示。运行 SWT 的界面程序必须要选择这个选项,否则会有出错信息提示。图 4-10运行 SWT 应用一般情况下,如果还是选择运行 Java 程序选项的

20、话,会有如下的错误提示:导致该错误的原因是没有为 Java 程序添加本地库文件。如果将“.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar”文件解压缩的话,会发现在“os/win32/x86”目录下有几个“dll”文件,这些是 SWT本地操作系统所需要的接口。运行 Java 程序的时候必须能够到这些文件,程序才可以正常运行。具体有以下几种解决方式:(1)最简单的办法就是直接把“.dll”文件到 JRE 的“bin”目录下。96Exceptionhread main java.lang.UnsatisfiedLinkError: no swt-win32-

21、3232 in java.library.pathat java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source)at java.lang.System.loadLibrary(Unknown Source)at.eclipse.swt.ernal.Library.loadLibrary(Library.java:123) at.eclipse.swt.ernal.win32.OS.(OS.java:18)at.eclipse.swt.widgets.Di

22、splay.(Display.java:125)atoWorld.main(oWorld.java:8)while(!shl.isDised()if (dipl.readAndDispatch() dipl.sleep();dipl.dise();第 4 章SWT 组件(2)设定环境变量,在参数“PATH”中加入“dll”文件。(3)把“.eclipse.swt.win32.win32.x86_3.2.0.v3232m.jar”里面的“swt-win32- 3232.dll”解压缩出来到“WINDOWSSYSTEM32”目录中。以上 3 种方法都可以保证 SWT 程序能正常运行。4.3可视化

23、SWT 编程组件Java 从最初开始,即使是做 UI 程序也都是由程序员手写的。一度“Edit Plus”+“Javac”的文本和命令行方式是 Java 程序员最常用的开发方式。软件开发追求敏捷。如果有快速开发的方式,程序员不应当年的使用,人们已经使用。Windows 下的可视化开发辅助环境做的比较成熟,而且由于多。相关的可视化用户界面开发起步比较晚,而且成产品除了NetBeans 似乎没有什么太流行的。本身 Java 界面相对做的就不是很成熟,再加上没有更好的可视化编程环境,使得 Java 桌面程序处于落后地位。但是有了 SWT 与众不同的实现方式,Java 程序编写的界面实现了高效与美观并

24、行。再加上有一款比较成可视化编程辅助工具,编写界面程序已经不再是难事了。本小节介绍两款可以在 Eclipse 中使用的可视化编程插件,SWT Designer 和 Visual Editor。这两款产品的使用都比较方便,而且和 Eclipse 结合比较稳定,在实际编程过程中,使用这两款产品的程序员越来越多。下面简单讲解这两款产品的特性及安装使用方式。4.3.1SWT DesignerSWT Designer 是一款十分简洁的可视化编程插件。该软件是一款的插件,在使用的时候必须是“或者。首先进入 SWT Designer 的主页,如图 4-11 所示,进行/”。,主页地址图 4-11SWT De

25、signer 首页97第 2 篇SWT 应用在首页中找到页面,地址为“./swt-designer/download.html”,从中选择适合本机操作系统的安装包。如果为常用的 Windows 操作系统的话,应当第一行的软件包,单击如图 4-12 所示的“Full Installer for Windows”。图 4-12页面SWT Designer 除了本身的文件很大以外和一般的 Eclipse 插件没有任何区别。安装过程就是按照前面介绍的各种步骤进行。将的文件“D11esigner_v6.5.0_for_Eclipse3.2.zip”解压缩之后放置到 Eclipse 中的“plugins”

26、文件夹下面。此外该软件还提供了一个用于卸载的批处理文件“delete.bat”来进行软件的删除。正确安装 SWT Designer 之后需要重新启动 Eclipse。之后,新建一个工程便可以看到如图 4-13 所示的项目选择窗口多出了一个“Designer”项目,里面可以直接创建“SWT/JFace JavaProject”或者“Widget Paletle Plug-in”。除了从向导中建立界面程序之外,只要是使用了界面相关内容的源程序文件,SWT Designer都可以进行识别,然后在程序窗口的左下角会出现源程序和设计页面的一个切换。与一般可视化编程环境不同的是,SWT Designer

27、的设计和程序是分离的。图 4-14 所示为使用 Swing 组件的例子。前面提到了 SWT Designer 是一个的软件,如图 4-15 所示,在其主页上有明确的限制。信息。如果没有办法的话也可以选择试用方式或者评估方式,只是功能上会受单击图 4-14 所示的“Design”之后就会触发 SWT Designer 程序,首先出现信息,效果如图 4-16 所示,SWT Designer 希望用户或者评估。从页面中可以选择或者免费试用。试用的话只能选择 “SWT 可视化设计器”、“Swing 设计器”和“窗口”中的一种,并且还是部分功能进行试用。如果了 SWTDesigner 产品,用户将会获得

28、一个序列号,只要在框中输入序列号和激活码就可以使用该98第 4 章SWT 组件产品的全部功能了。下面演示如何试用版。图 4-13SWT Designer 项目图 4-14源文件视图图 4-15的 SWT Designer(1)在激活框中选择试用方式之后会显示“Next”按钮,单击“Next”按钮进入如图 4-17 所示的个人信息填写界面,输入个人信息。(2)单击“Next”按钮,页面将会自动连接到 SWT Designer 的安装页面“进行,之后就可以试用了,如图 4-18 所示。com”99第 2 篇SWT 应用图 4-16激活页面图 4-17个人信息完成之后,前面提到的 Java 源文件就

29、可以用可视化的方式编辑了,效果如图 4-19 所示。SWT Designer 的功能已经比较全面了,但仍只能作为编程的一个辅助工具,毕竟它还有许多地方做得还不如微软的产品使用起来方便。在 SWT Designer 中手工写代码还是很重要的,而且当界面组件增多的时候,SWT Designer 十分耗费资源,甚至可能会导致 Eclipse 内存异常而退出。100第 4 章SWT 组件图 4-18连接图 4-19Design 页面4.3.2Visual EditorVisual Editor 也是一款可视化的 GUI 开发工具,也是以插件的方式安装到 Eclipse中去的,可以开发 Swing/JF

30、C 和 SWT/RCP 桌面程序。Visual Editor 是附属于 Eclipse 的开源项目,和 SWT Designer 不同的一点是,Visual Editor 是免费的。Visual Editor 需要两个 Eclipse 组件来支持,安装 Visual Editor 之前要EMF”和“GEF”组件。这些组件都可以在 Eclipse 的上找到。下面三个文件并且以插件方式安装到 Eclipse 中,就可以使用 Visual Editor 了。101第 2 篇SWT 应用GEF-runtime-3.0.1.zipemf-sdo-runtime-2.0.1.zipVE-runtime-1

31、.1.0.1.zip确定 Visual Editor 正确安装的方法是在 Java 工程的头部右击,单击“添加”(new)菜单,如果出现“Visual Class”和“Example”两个选项就表示已经正确安装了 Visual Editor。“Example”选项中是 Visual Editor 自带的两个工程,目的是作为指导开发的例子来使用,分别是一个浏览器和一个文本编辑器。Visual Editor 的开发环境和 SWT Designer 有一些不同,体现在按钮的排布和分类上。但这些都不会影响使用。使用 Visual Editor 也需要新建 Java 工程,这点也和 SWT Design

32、er 不同。新建 Java 工程之后在添加新类的时候选择 Visual Class 就可以使用可视化界面了,如图 4-20所示。下面的工作是添加一个可视化类的配置窗口。一般创建窗口文件都需要选择 SWT 中的S类型,然后输入类的名字并且选择“public sic void main (String arg)”来构造一个“main”方法。单击图 4-21 中的“Finish”按钮就可以进行可视化编辑了。图 4-20Visual Editor 编辑界面图 4-21配置 Visual Class4.4基类 ControlSWT 的控件类结构不像一般的 GUI 类库,没有单一的父组件。常见的 Swin

33、g 和微软的 MFC都有一个Item。的父类。SWT 中有几个比较重要的父类,分别是、ite 和(1)Widget 是基本的 SWT GUI 组件类似于 Java AWT 中的 Component 和 Swing 中的JComponent。Widget 是一个抽象类,是图形用户接口的元素。102第 4 章SWT 组件(2)Control 拥有操作系统的对等物的窗口小部件(换句话说,在操作系统中具有同一是一个抽象类。),(3)Comite 包含其他控件的控件(类似于 Java AWT 中的 Container 和 Swing 中的 JPanel)属于容器类。Comite 可以包含其他 Comit

34、e 和 Control 的容器。(4)Item 是其他控件包含的窗口小部件(该控件可能不是复合控件),比如列表和表。注意;包含一些项的控件很少包含其他控件,反之亦然。Item 也是一个抽象类。Item 类是一个轻量级的系统对象,总是作为基本的元素与其他一些类配合使用。比如 Tree 中的元素即为 TreeItem,Table 的元素则是 TableItem,的元素则是Item 了。4.4.1继承关系SWT 的 Java 文档内嵌在 Eclipse SDK 帮助文档中。只要在开发环境中选择“Help”“Help Content”命令就可以在 API 中找到相关信息,如图 4-22 所示。“Con

35、trol”类可以表示一般的用户界面元素,是操作系统的标准控件。这些操作系统控件都被定义为这个类的子类。例如 Button、Text 都是其子类。“Control”继承自 Drawable,其直接被继承的子类有:Button、Label、Link、ProgressBar、Sash、Scrollable、Slider。4.4.2Control 类的常用方法“Control”类本身是抽象类,在 Eclipse API 中的相关文档如图 4-23 所示,在其中用户可以事件、修改外观、属性和视图等。图 4-22SWT API图 4-23Control 类“Control”类常用方法:addControl

36、Listener(ControlListener listener):给当前控件ControlListener器,当Control 对象被移动或者尺寸改变的时候把ControlListener 接口中定义的消息发给的器。103第 2 篇SWT 应用addFocusListener(FocusListener listener):给当前控件FocusListener器,当的监Control 对象失去或者获得焦点的时候把 FocusListener 接口中定义的消息发给。addHelpListener(HelpListener listener):给当前控件HelpListener器,当 Cont

37、rol器。对象触发帮助事件的时候把 HelpListener 接口中定义的消息发给的addKeyListener(KeyListener listener):给当前控件KeyListener器,当有键盘操作,比如按下或者松开的时候,把 KeyListener 接口中定义的消息发给的器。器,当addMouseListener(MouseListener listener):给当前控件MouseListener鼠标的按钮有动作,比如按下或者松开的时候把 MouseListener 接口中定义的消息发给的器。addMouseMoveListener(MouseMoveListener listene

38、r): 给当前控件MouseMoveListener。器,当鼠标移动时把 MouseMoveListener 接口中定义的消息发给的监addMouseTrackListener(MouseTrackListener listener): 给当前控件MouseTrackListener器,当鼠标经过或者在某个控件上面移动的时候把 MouseTrackListener 接口中定义的消息发给的器。addPaListenaListener listener):给当前控件PaListener器,当事件器。接收者进行绘制的时候把 PaListener 接口中定义的消息发给的addTraverseListe

39、ner(TraverseListener listener):给当前控件当有经过事件的时候把 TraverseListener 接口中定义的消息发给TraverseListener器,的器。computeSize(computeSize(wH,wH,hH):返回接收者的首选尺寸。hH,changed):返回接收者的首选尺寸(重载)。forceFocus():强制接收者获得键盘输入焦点,使得全部的键盘时间发送到当前的接收者那去。getAcsible():返回当前接收者可以使用的对象。getBackground():返回当前接收者的背景颜色。 getBackgroundImage():返回当前接收

40、者的背景getBorderWidth():返回当前接收者的边际宽度。getBounds():返回一个矩形来描述接收者的尺寸和对于父类的相对位置。getEnabled():返回型表示当前接收者是否可以操作getFont():返回接收者用于处理文字信息的字体。 getForeground():返回接收者用于画图的前景颜色。 getLayoutData():返回接收者相关的布局信息。getLocation():返回接收者对于父类的相对位置。get():如果存在右键弹出菜单的话则返回菜单,否则返回 null。getMonitor():返回接收者的器。getParent():返回接收者的父类。getS(

41、):返回接收者的 S类。104第 4 章SWT 组件getSize():返回接收者的尺寸。getToolTipText():返回接收者的 getVisible():返回接收者是否可见。说明文字。ernal_dise_GC(hDC,ata data):唤起回收句柄。回收句柄。ernal_new_GC(ata data):唤起产生新的isEnabled():返回接收者是否可操作。 isFocusControl():返回接收者是否具有控制焦点。 isReparentable():返回接收者是否支持修改父类。 isVisible():返回接收者是否可见。moveAbove(Control contro

42、l):将接收者的绘图顺序上移到某个控件之上。moveBelow(Control control):将接收者的绘图顺序上移到某个控件之下。 pack():使接收者的尺寸变成预先设定的尺寸。pack(changed):使接收者的尺寸变成预先设定的尺寸。redraw():使接收者的全部边界变成准备重绘状态。redraw(状态。x,y,width,height,all):使接收者的指定位置变成准备重绘removeControlListener(ControlListener listener):移除 ControlListener。 removeFocusListener(FocusListener

43、listener):移除 FocusListener。 removeHelpListener(HelpListener listener):移除 HelpListener。 removeKeyListener(KeyListener listener):移除 KeyListener。 removeMouseListener(MouseListener listener):移除 MouseListener。 removeMouseMoveListener(MouseMoveListener listener):移除 MouseMoveListener。removeMouseTrackListen

44、er(MouseTrackListener listener):移除 MouseTrackListener。removePaListenaListener listener):移除 PaListener。removeTraverseListener(TraverseListener listener):移除 TraverseListener。setBackground(Color color):设定接收者的背景颜色。setBackgroundImage(Image image):设定接收者的背景。setBounds(x,y,width,height):设定接收者的尺寸和位置。setBounds

45、(Rectangle rect):由指定的位置设定接收者的尺寸和位置。setCapture(capture):如果设置为 true,则所有的鼠标时间都将发送到接收者那里。setCursor(Cursor cursor):设定光标。setEnabled(enabled):设定可操作。setFocus():设定获得焦点。 setFont(Font font):设定字体。setForeground(Color color):设定前景色。setLayoutData(Object layoutData):设定布局。setLocation(setLocation(Pox,y):设定位置。location)

46、:设定位置(重载)。105第 2 篇SWT 应用set():设定菜单。ite parent):设定父类。 redraw):设定重绘。height):设定尺寸。setParent(ComsetRedraw(setSize(setSize(Powidth,size):设定尺寸(重载)。setToolTipText(String string):设定说明文字。setVisiboolean visible):设定可见。4.5常 用 组 件SWT 集成了桌面程序中的各种组件,通过这些组件就可以写出外观优美功能强大的界面程序。本节逐个介绍各种常用组件,这些组件都继承自“Control”类,所以前面提到的常

47、用方法都可以在这些类中使用到。有些程序为了讲解方便给出了行号,但只是当前程序段中的行号,并不是在整个程序中的位置。4.5.1按钮按钮(button)是界面中最常用的控制元素。SWT 中的按钮有 SWT.PUSH(单击按钮)、 SWT.TOGGLE(锁定按钮)、SWT.ARROW(箭头按钮)、SWT.RADIO(单选按钮)和 SWT.CHECK(复选按钮)等。1SWT.PUSH(单击按钮)图 4-24 所示是一个简单的单击按钮,它是最普通的按钮。在程序中还可以添加对按钮的说明提示。初始化该按钮的代码如下,之后的代码都会省略对名字空间的和类的定义等,也不再展示 S设置,只展示空间本身的代码。图 4

48、-24 所示的“this is a button”是功能提示,当鼠标移动到按钮上方的时候会自动出现。程序的第 1 行是初始化,将当前的按钮到 S中去,把 S作为按钮的父类。这里为其指定的按钮类型是“SWT.PUSH”。在第 2 行中设定其文字显示,为“o World”。然后在第 3 行中设定文字提示。最后使用 pack()方法由系统去重新设定按钮的大小。按钮的外观除了这个之外还有平面按钮和有边界按钮两种,这是很早的 Windows3.1 的风,如图 4-25 所示。格按钮,现在看起来似乎有一些不图 4-24单击按钮图 4-25按钮样式106Button button = new Button

49、(s,SWT.PUSH);button.setText(o World);button.setToolTipText(this is a button);button.pack();第 4 章SWT 组件这 3 种按钮除了在初始化按钮时用了不同的参数,其他方面的设计是一样的。在程序的第 7 行多出了一行控制显示位置的代码是靠获得前一个控件的相对位置来排布的。如果不加这行代码,产生的结果是所有按钮在同一个位置2SWT.TOGGLE(锁定按钮),无法正常显示。锁定按钮是一种状态按钮,有按下和弹起两种状态。锁定按钮同样有 3 种样式,初始化代码如下:锁定按钮的弹起按钮和一般的按钮没有区别,图4-26

50、 所示为各种样式的按钮被按下的107Bu tt on bu tt on = n ew Bu tt on ( s, SWT . TOGGLE ) ;/ TOGG按LE钮bu tt on . s e t Te x t ( o Wo r l d ) ;bu tt on . s e t Too l T i pTe x t ( t h i s i s a bu tt on ) ;bu tt on . p ac k () ;/ /设置样式 5Bu tt on bu t ton2 = new Bu tt on ( s, SWT .TOGGLE | SWT .FLAT ) ; / FLAT 按钮bu tt o

51、n2 . s e tBound s ( bu t ton . g e tBounds () . x+bu tt on . g e t Bound s () . wi d t h*2 , bu tt on . g e t Bound s () . y , 50 , 50 ) ;bu tt on2 . s e t Te x t ( o Wo r l d ) ;/ /设置位置bu tt on2 . s e t Too l T i pTe x t ( t h i s i s a FLAT TOGGu tt on ) ;bu tt on2 . p ac k () ; 11Bu tt on bu tt o

52、n3 = n ew Bu tt on ( s, SWT . TOGGLE | SWT . BORDER) ;/ BORDER按钮bu tt on3 . s e tBound s ( bu t ton2 . g e t Bound s () . x+bu t ton2 . g e t Bound s () . w i d t h*2 , bu tt on . g e t Bound s () . y , 50 ,1450 ) ;/ /设置按钮的大小及位置bu tt on3 . s e t Te x t ( o Wo r l d ) ;/ /设置按钮上的显示文字bu tt on3 . s e t

53、Too l T i pTe x t ( t h i s i s a BORDER TOGGu tt on ) ;bu tt on3 . p ac k () ;Bu tt on bu tt on = n ew Bu tt on ( s, SWT . PUSH) ;bu tt on . s e t Te x t ( o Wo r l d ) ;bu tt on . s e t Too l T i pTe x t ( t h i s i s a bu tt on ) ;bu tt on . p ac k () ; 5Bu tt on bu tt on2 = n ew Bu tt on ( s, SW

54、T . FLAT ) ;/按钮bu tt on2 . s e tBound s ( bu t ton . g e tBounds () . x+bu tt on . g e t Bound s () . wi d t h*2 , bu tt on . g e t Bound s () . y , 50 , 50 ) ;bu tt on2 . s e t Te x t ( o Wo r l d ) ;/ /设置位置bu tt on2 . s e t Too l T i pTe x t ( t h i s i s a FLAT bu tt on ) ;/ /设置样式bu tt on2 . p ac

55、 k () ;/ /调整大小11Bu tt on bu tt on3 = n ew Bu tt on ( s, SWT . BORDER) ;bu tt on3 . s e tBound s ( bu t ton2 . g e t Bound s () . x+bu t ton2 . g e t Bound s () . w i d t h*2 , bu tt on . g e t Bound s () . y , 50 ,1450 ) ;bu tt on3 . s e t Te x t ( o Wo r l d ) ;bu tt on3 . s e t Too l T i pTe x t (

56、 t h i s i s a BORDER bu tt on ) ;bu tt on3 . p ac k () ;第 2 篇SWT 应用状态。对比图 4-25,除了中间的平面按钮样式没有改变之外,其他两种按钮都有向下凹陷的效果。3SWT.ARROW(箭头按钮)箭头按钮的样式更类似器中的一些按钮。按钮的箭头是有方向的,如图 4-27 所示,每个按钮同样有“SWT.PUSH”、“SWT.FLAT”和“SWT.BORDER”3 款样式可以选择。图 4-26图 4-27锁定按钮样式箭头按钮4.5.2单选按钮和复选框1单选按钮(SWT.RADIO)在同一组中,单选按钮每次只能有一个被选中,如图 4-28

57、 所示。如何设定组需要涉及容器类的概念。容器类是一个比较复杂的概念,这里不深入展开,只需要明白其就是放置和取出各种对象,用于管理各种对象的类。这里使用了 SWT 中的一个简单的容器“Group”(分组)。参考代码如下:108Group group = new Group(s,SWT.SHADOW ETCHED OUT); /设定容器final FormData fd group = new FormData();fd_group.bottom = new FormAttaent(0, 122);图 4-28单选按钮Button button = new Button (s,SWT.ARROW|

58、SWT.ARROW UP); /上按钮 button.setToolTipText(this is a ARROW button);button.pack();Button button2 = new Button (s,SWT.ARROW|SWT.DOWN);/下按钮 button2.setBounds(button.getBounds().x+button.getBounds().width*2,button.getBounds().y, 50, 50); button2.setToolTipText(this is a ARROW DOWN button); button2.pack()

59、;Button button3 = new Button (s,SWT.ARROW|SWT.LEFT);/左按钮 button3.setBounds(button2.getBounds().x+button2.getBounds().width*2,button.getBounds().y, 50,50); button3.setToolTipText(this is a ARROW LEFT button); button3.pack();Button button4 = new Button (s,SWT.ARROW|SWT.RIGHT);/右按钮 button4.setBounds(bu

60、tton3.getBounds().x+button2.getBounds().width*2,button.getBounds().y, 50,50);button4.setToolTipText(this is a ARROW RIGHT button); button4.pack();第 4 章SWT 组件首先在第 1 行了一个“Group”类作为所有单选按钮的容器“group”。以后其中每一个单选按钮都会将其设置为父类。然后需要设置该“Group”类的位置。这里使用“FormData”类来控制“Control”类的摆放,这里对比单选按钮的分布方式,两种分布都可以实现,后面的例子将会“F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论