资源描述
第四章SWT图形用户界面,本章要点1SWT程序开发步骤。2SWT常用组件的使用。3SWT的布局。4SWT的事件处理。5SWTDesigner简介。本章难点1SWT常用组件的使用。2.SWT的布局。3.SWT的事件处理。,4.1SWT/JFace简介,SWT(StandardWidgetToolkit)即标准小窗口工具箱,是IBM公司推出的一种在Eclipse中使用的集成开发环境。JFace是一个用户界面工具箱,也是一个易用、功能强大的图形包,它简化了常见的图形用户界面的编程任务。SWT和JFace都是Eclipse平台上的主要组件。,4.1.1SWT程序开发步骤,在eclipse的plugins目录下,可以找到文件org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar,在DOS状态下,用jar命令将该文件解压,命令格式如下:Jarxforg.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar解压后得到以下4个SWT的原生库文件:swt-win32-3235.dllswt-awt-win32-3235.dllswt-gdip-win32-3235.dllswt-wgl-win32-3235.dll,按以下方法设置SWT原生库文件,以便Java启动时访问:方法一:将这四个DLL文件复制到jre的bin目录下。方法二:设置环境变量,在PATH中加入这几个dll文件所在的目录。方法三:在eclipse的Java项目中导入原生库文件。操作方法:在eclipse的包资源管理器中,右单击项目名导入常规文件系统下一步浏览选择DLL文件所在目录确定勾选DLL文件完成。,导入SWT的原生库文件后,还要在eclipse的Java项目中配置构建路径,添加外部JAR,将文件org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar加入到项目中,操作方法:在eclipse的包资源管理器中,右单击项目名构建路径配置构建路径库(L)添加外部JAR在eclipse的plugins文件夹中找到该jar文件打开确定。例4.1在Java应用程序中使用SWT的组件。,创建一个典型的SWT应用程序需要以下步骤:创建一个Display创建一个或多个Shell设置Shell的布局创建Shell中的组件用open()方法打开Shell窗体写一个事件转发循环销毁display,4.1.2SWT中的包,org.eclipse.swt.widgetsorg.eclipse.swt.layoutorg.eclipse.swt.customorg.eclipse.swt.eventorg.eclipse.swt.graphicsorg.eclipse.swt.ole.win32OLE是微软的组件技术,全称叫对象链接与嵌入。通过这个包使得SWT程序也可以内嵌IE浏览器或Word、Excel等程序。,4.2SWT/JFace常用组件,4.2.1按钮组件Button类的构造方法:Button(Compositeparent,intstyle)该方法有两个参数:parent是指Button创建在哪一个容器上。Composite(面板)是最常用的容器,Shell(窗体)继承自Composite,此参数也能接受Shell和任何继承自Compsite的类。style用来指定Button的式样。SWT组件可以在构造方法中使用式样(style)来声明组件的外观形状和文字的式样。SWT其他组件的构造方法和Button类相似,参数的含义也相同。,Button组件常用式样SWT.PUSH:按钮。SWT.CHECK:多选按钮。SWT.RADIO:单选按钮。SWT.ARROW:箭头按钮。SWT.NONE:默认按钮。SWT.CENTER:文字居中,与SWT.NONE相同。SWT.LEFT:文字靠左。SWT.RIGHT:文字靠右。SWT.BORDER:深陷型按钮。SWT.FLAT:平面型按钮。一个Button也可以指定多个式样,只要将指定的各个式样用符号“|”连接起来即可,Button组件的常用方法:setText(Stringstring):设置组件的标签文字。setBounds(intx,inty,intwidth,intheight):设置组件的坐标位置和大小(x轴坐标,y轴坐标,组件宽度width,组件高度height)。setEnabled(Booleanenabled):设置组件是否可用。true:可用(默认值),false:不可用。setFont(Fontfont):设置文字的字体。setForeground(Colorcolor):设置前景色。setBackgrount(Colorcolor):设置背景色。setImage(Imageimage):设置显示的图片。,setSelection(Booleanselected):设置是否选中(仅对复选框或单选框有效)。true:选中,false:未选中(默认值)。setToolTipText(Stringstring):设置鼠标停留在组件上时出现的提示信息。例4.2按钮示例。,4.2.2标签组件,标签(Label类)组件是SWT中最简单的组件。Label类的构造方法和Button类相似,参数的含义与相同,格式如下:Label(Compositeparent,intstyle)Label类的常用式样有以下几种:Label类常用的式样如下:SWT.CENTER:文字居中。SWT.RIGHT:文字靠右。SWT.LEFT:文字靠左。SWT.NONE:默认式样。,SWT.WRAP:自动换行。SWT.BORDER:深陷型。SWT.SEPARATOR:分栏符,默认为竖线分栏。SWT.HORIZONTAL:横线分栏符。例4.3标签示例,4.2.3文本框组件,文本框(Text类)的式样如下:SWT.NONE:默认式样。SWT.CENTER:文字居中。SWT.LEFT:文字靠左。SWT.RIGHT:文字靠右。SWT.MULTI:可以输入多行,须回车换行。SWT.WRAP:可以输入多行,到行尾后自动换行。SWT.PASSWORD:密码型,输入字符显示成“*”。SWT.BORDER:深陷型。SWT.V_SCROLL:带垂直滚动条。SWT.H_SCROLL:带水平滚动条。例4.4各种文本框示例。,4.2.4下拉框组件,1下拉框(Combo类)的式样SWT.NONE:默认式样。SWT.READ_ONLY:只读。SWT.SIMPLE:无须单击下拉框,列表会一直显示。2下拉框(Combo类)的常用方法add(Stringstring):在Combo中增加一项。add(Stringstring,intindex):在Combo的第index项后插入一项。deselectAll():使Combo组件中的当前选择项置空。removeAll():将Combo中的所有选项清空。,setItems(Stringitems):将数组中的各项依次加入到Combo中。select(intindex):将Combo的第index+1项设置为当前选择项。例4.5下拉框示例,4.2.5列表框组件,1列表框(List类)的式样SWT.NONE:默认式样。SWT.V_SCROLL:带垂直滚动条。SWT.MULTI:允许复选。SWT.SINGLE:允许单选。2常用方法列表框(List类)组件的方法和下拉框(Combo类)是一样的,但由于List可选择多项,而Combo只能选择一项,所以List没有getText()方法,List的取值是用getSelection()方法,返回一个所有选项组成的String数组。例4.6列表框示例。,4.2.6菜单,菜单(Menu类,MenuItem类)是常用的SWT组件,Menu是一个菜单栏,同时也是一个容器,可以容纳菜单项(MenuItem)。1Menu的式样SWT.BAR:菜单栏,用于主菜单。SWT.DROP_DOWN:下拉菜单,用于子菜单。SWT.POP_UP:鼠标右键弹出式菜单。2MenuItem的式样SWT.CASCADE:有子菜单的菜单项。SWT.CHECK:选中后前面显示一个小勾。SWT.PUSH:普通型菜单。SWT.RADIO:选中后前面显示一个圆点。SWT.SEPARATOR:分隔符。,3建立菜单的一般步骤:首先建立一个菜单栏,需要使用SWT.BAR属性。MenumainMenu=newMenu(shell,SWT.BAR);在窗体中指定需要显示的菜单栏。shell.setMenuBar(mainMenu);创建顶级菜单项,需要使用SWT.CASCADE属性。MenuItemfileItem=newMenuItem(mainMenu,SWT.CASCADE);fileItem.setText(文件,将顶级菜单项与下拉菜单关联。fileItem.setMenu(fileMenu);二级菜单的创建只需重复以上步骤。注意:本例创建所有Menu对象的第一个参数都是shell;创建MenuItem对象的第一个参数是该MenuItem所在的Menu对象;如果某Menu是某MenuItem的子菜单,则还要建立关联:MenuItem.setMenu(Menu)。例4.7菜单的创建。,4.3容器类,通常,组件构建在容器类中,容器构建在主窗体(shell)中,主窗体也是容器,也就是说,容器不仅可以容纳组件,也可以容纳容器。4.3.1面板,面板(Composite类)是最常用的容器。主窗体(shell)是面板(Composite)的子类。面板的构造方法格式如下:Composite(Compositeparent,intstyle)第一个参数表示该容器创建在哪个容器上,第二个参数表示容器的式样。Composite的式样一般都是用SWT.NONE,这时Composite在界面是不显示出来的,只是发挥着容器的作用。如果要让容器形成凹陷效果,可以用SWT.BORDER式样。,Composite的常用方法:getLayout():得到布局管理器。getLayoutData():得到布局数据。getParent():得到容纳该容器的父容器。getShell():得到容纳该容器的Shell。layout():将容器上的组件重新布局,相当于刷新。例4.8面板示例。,4.3.2分组框,分组框(Group类)是面板(Composite类)的子类,所以两者用法基本相同。主要区别是Group显示有一个方框,且方框线上还可以显示说明文字。例4.9分组框示例。,4.3.3选项卡,选项卡包括一个选项卡(TabFolder类)和一个选项页(TabItem类),TabFolder是容器,可以容纳其他容器和组件,但TabItem不是容器,可以把它看成是一个选项标签,TabFolder通过TabItem来对其中的组件进行控制。每一个TabItem用setControl()方法来控制一个界面组件。例4.10选项卡示例。,4.4布局管理器,布局管理器常常是专为某一个复合组件设计的。一些布局管理器只使用它们自身的参数就可以控制,而另一些布局管理器还需要其它参数(LayoutData),该参数是在设置布局管理器的复合组件中的每个控件上指定的。SWT中常用的布局管理器有如下一些:FillLayout:充满式布局,在容器中以相同的大小以单行或单列排列组件。RowLayout:行列式布局,以单行或多行的方式定制组件的排列方式。GridLayout:网格式布局,以网格的方式进行布局,组件可以占用指定的一个或几个网格。FormLayout:表格式布局,通过定义组件四个边的距离来排列组件,被引用的相对的组件可以是父组件,也可以是同一容器中的其它组件。,4.4.1充满式布局,1构造方法:FillLayout()创建按一行充满容器的对象。FillLayout(inttype)创建按指定类型充满容器的对象,指定类型(type)有:SWT.HORIZONTAL按一行充满容器。SWT.VERTICAL按一列充满容器。2常用属性:inttype指定组件充满容器的类型。type的取值同上。例4.11,4.4.2行列式布局,行列式布局(RowLayout类)可以使组件折行显示,可以设置边界距离和间距。另外,还可以对每个组件通过setLayoutData()方法设置RowData对象。RowData用来设置组件的大小。1构造方法:RowLayout()创建按行放置组件的对象。RowLayout(inttype)创建按指定类型放置组件的对象。指定类型(type)有:SWT.VERTICAL按列放置组件。SWT.HORIZONTAL按行放置组件。,2常用属性:intmarginWidth:组件距容器边缘的宽度intmarginHeight:组件距容器边缘的高度intmarginTop:组件距容器上边缘的距离intmarginBottom:组件距容器下边缘的距离intspacing:组件之间的距离,默认值为3。booleanjustify:如果该属性为true,则组件间的距离随容器的拉伸而变大。默认值为false。booleanwrap:如果该属性为true,则当容器空间不足时会自动折行;如果该属性为false,不自动折行。默认值为true。booleanpack:如果该属性为true,组件大小为设定值;如果该属性为false,则强制组件的大小相同。默认值为true。inttype:使组件按指定式样放置,(type=SWT.HORIZONTAL|SWT.VERTICAL),默认为按行放置:SWT.HORIZONTAL。,3RowData类:RowData称为RowLayout的布局数据类,可用于改变容器中组件的外观形状。其构造方法:RowData(intwidth,intheight);例4.12,4.4.3网格式布局,1GridLayout的属性intnumColumns:设置容器的列数,组件从左到右按列放置,当组件数大于列数时,下一个组件将自动添加新的一行。booleanmakeColumnsEqualWidth:强制使列都具有相同的宽度,默认值为false。intmarginWidth:设置组件与容器边缘的水平距离intmarginHeight:设置组件与容器边缘的垂直距离,默认值为5。inthorizontalSpacing:设置列与列之间的间隔,intverticalSpacing:设置行与行之间的间隔,默认值为5。例4.13,2布局数据类(GridData类)GridData是GridLayout专用的布局数据类,用GridData可以构建很多复杂的布局方式。GridData的构造方法如下:GridData();创建一个属性值为默认值的对象。GridData(inttype);创建一个指定类型(type)的对象。GridData常用类型如下:GridData.FILL通常与GridData类的对象属性horizontalAlignment和verticalAlignment配合使用,充满对象属性指定的空间。GridData.FILL_HORIZONTAL水平充满,组件充满网格水平方向的空间。GridData.FILL_VERTICAL垂直充满,组件充满网格垂直方向的空间。GridData.FILL_BOTH双向充满,组件充满水平和垂直方向的空间。,GridData常用对象属性如下:inthorizontalSpan设置组件占用的列数,默认值为1。intverticalSpan设置组件占用的行数,默认值为1。horizontalAlignment设置组件的对齐方式为水平方向。verticalAlignment设置组件的对齐方式为垂直方向。grabExcessHorizontalSpace抢占额外的水平空间。grabExcessVerticalSpace抢占额外的垂直空间。,horizontalAlignment和verticalAlignment可以取以下值:BEGINNING开始(水平对齐时居左;垂直对齐时居上)CENTER居中END结束(水平对齐时居右;垂直对齐时居下)FILL充满默认的horizontalAlignment值是BEGINNING。默认的verticalAlignment值是CENTER。例4.14使用gridData布局。,4.4.4表格式布局,表格式布局(FormLayout类)是一种非常灵活、精确的布局方式。FormLayout也有专用的布局数据类FormData,此外,还增加了一个FormAttachment类。1FormLayout的属性intmarginWidth:设置组件与容器边缘的水平距离,默认值为0。intmarginHeight:设置组件与容器边缘的垂直距离,默认值为0。,2FormData类FormData的构造方法FormData()默认构造方法,组件的宽度和高度要用属性width和height设置。FormData(intwidth,intheight)参数width和height设置组件的宽度和高度。FormData的属性width设置组件的宽度。height设置组件的高度。top和FormAttachment配合设置组件顶部和父容器顶部的边距。,bottom和FormAttachment配合设置组件底部和父容器底部的边距。left和FormAttachment配合设置组件左边和父容器左边的边距。right和FormAttachment配合设置组件右边和父容器右边的边距。,3FormAttachment类Attachment的含义是附着、粘贴。FormAttachment类就是用来指定组件在父容器中的粘贴位置。FormAttachment计算组件粘贴位置和组件大小的方法是依据下面的表达式:y=ax+b表达式中y是纵坐标,从上往下是正方向;x是横坐标,从左至右是正方向;a是斜率(a=m/n,n0),b是偏移量,沿x、y轴正方向的偏移量为正,反之为负。.,FormAttachment的构造方法FormAttachment()FormAttachment(Controlcontrol)FormAttachment(Controlcontrol,intoffset)FormAttachment(Controlcontrol,intoffset,intalignment)FormAttachment(intm,intn,intoffset)FormAttachment(intm,intoffset)FormAttachment(intm)例4.15FormData与FormAttachment的配合使用例4.16构造方法FormAttachment(intm,intn,intoffset)的使用示例。例4.17综合布局示例。,4.5SWT的事件处理,4.5.1SWT的常用事件1addMouseListener鼠标监听器。常用方法:mouseDown()鼠标按下时触发。mouseUP()鼠标放开时触发。mouseDoubleClick()鼠标双击时触发。2addKeyListener按键监听器。常用方法:keyPressed()当焦点在组件上时,按下键盘任一键时触发。但对某些组件(如按钮Button),按回车键时不能触发。keyReleased()按键弹起时触发。,3addSelectionListener组件选择监听器。常用方法:widgetSelected()当组件被选择(单击鼠标、焦点在组件上时按回车键)时触发。4addFocusListener焦点监听器。常用方法:focusGained()得到焦点时触发。focusLost()失去焦点时触发。,4.5.2SWT的常用监听器应用实例,例4.18鼠标监听器,监听鼠标双击事件。例4.19键盘监听器,监听键盘事件。例4.20组件选择监听器,监听组件选择事件。,4.6SWTDesigner简介,SWTDesigner是一种功能强大且容易使用的基于EclipseSWT技术的图形用户界面设计工具,是一个很好的Eclipse的界面开发插件包。利用SWTDesigner的可视化界面,只需采用拖拉操作,就可以很快地在窗体上创建各种组件,设计出来的窗体和组件的外观和操作系统平台下其他软件的外观相似,具有本机系统的风格。SWTDesigner可以自动生成Java代码,利用它的属性编辑器还可以改变组件的各种属性,使SWT界面开发变得非常容易。,4.6.1SWTDesigner的下载和安装,1下载下载版本:SWTDesigner6.1.0,文件名:Designer_v6.1.0_win32_x86.exe,下载地址:http:/www.swt-,4.6.2SWTDesigner开发实例,操作步骤如下:创建SWT/JFace项目创建ApplicationWindow窗体在窗体中加入组件添加事件处理代码,4.7本章小结,与AWT和SWING相比,SWT提供了和本机系统相同的用户界面组件,具有较好的运行效率和稳定的平台表现,因此近年来取得了很快的发展。本章介绍了SWT常用组件、SWT常用容器类、SWT常用的布局方式、SWT事件处理方法等图形化用户界面开发技术。最后介绍了一款SWT可视化界面开发插件包SWTDesigner。通过大量实例,演示了SWT开发桌面应用程序的基本技术和技巧。,
展开阅读全文