第7章SWT控件详解_第1页
第7章SWT控件详解_第2页
第7章SWT控件详解_第3页
第7章SWT控件详解_第4页
第7章SWT控件详解_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

第7章SWT控件详解上一章学习了如何用SWT小部件制作GUI界面,这一章则详细讲解一些主要部件的使用。SWT的部件非常丰富,要在有限的篇幅中详细讲解每一个部件是非常困难的。而且Eclipse的帮助系统提供了详细的部件API参考手册,所以本书也尽量不重复参考手册中的内容,而是通过一些在开发中经常遇到的应用实例,对常用的部件进行讲解。另外,SWT中,很多部件的使用都是大同小异的,学习过一些常用的部件,其他部件也很容易理解。7.1用Composite制作可重用部件在SWT的JavaDoc中,对Composite的介绍非常简单:“Composite的实例是一个可以用来容纳其他控件的控件。”在实际应用中,Composite的用途可不是一句话这么简单。在实际应用中,Composite非常重要,可以用来建造新的、可重用的部件。7.1.1部件重用的原理Composite可以作为一个基本的容器,把一组界面封装起来,做成Bean,可以实现界面的重用。例如同样一个界面,通过Composite封装后,就可以当作一个新部件,可以应用在窗口中、也可以应用到对话框中、或者应用到向导中,如果是制作Eclipse的插件,还可以放置到视图中。7.1.2重载新的Composite下面按照这种思想建立一个可重用的部件。按照下面的代码建立一个类Composite001,这个类继承Composite。7.1.3可重用账号密码部件的设计现在这个Composite001里面还只是一个空白的部件,什么输入功能都没有。下面要把它变成一个账号密码部件。7.1.4初始化Composite的子部件先按照下面代码修改initialize()方法。在这个方法中按照前面图7-3的设置添加了多个部件:三个显示输入框名称的Label,两个显示提示信息的Label,三个文本输入框Text。7.2GridLayout详解GridLayout,顾名思义,就是网格布局。在一个容易上划分多行多列,部件放置到指定的单元格中,从而实现整齐的布局。GridLayout是SWT中使用频率最高的布局模式,相对与其他Layout对象,使用起来复杂一点。下面就来详细学习一下如何使用GridLayout。7.2.1GridLayout的布局方式在前面7.1.4小节的示例中,已经用GridLayout建立了布局。正如initialize()方法的前两行代码,初始化了一个GridLayout。GridLayoutgridLayout=newGridLayout();GridLayout.numColumns=3;7.2.2设置GridLayout的属性GridLayout还有其他属性,对布局作更多的设置。常用的属性有:marginHeight、marginWidth、horizontalSpacing、verticalSpacing。marginHeight:marginWidth:horizontalSpacing:verticalSpacing:7.2.2设置GridLayout的属性7.2.3单元格和GridDataGridData告诉GridLayout,对应的部件如何放置到GridLayout的单元格中。下面是GridData的常用属性,图7-6说明了这些属性的对应设置的用途。grabExcessHorizontalSpace:grabExcessVerticalSpace:horizontalAlignment:horizontalIndent:horizontalSpan:verticalAlignment:verticalIndent:verticalSpan:heightHint:widthHint:7.3Text单行文本输入框按照上面的代码,把一个Composite部件布局好。虽然这个界面部件就可以使用了,但是要满足实际应用,还需要加上更多的交互功能。例如用户账号有效性的验证,按照设计,用户账号只能是英文大小写字母和数字、下划线的组合。还有密码输入框的掩饰显示,不能让密码直接显示出来。要实现这些功能,就要对Text部件进行更多的处理。7.3.1密码输入框普通文本输入框变成密码输入框很简单。首先在初始化的时候加入SWT.PASSWORD样式;然后,用setEchoChar()属性设置密码掩饰符。如下面代码那样,给password和passcheck加上密码掩饰符,同时设置密码长度不能超过16个字符。password=newText(this,SWT.BORDER|SWT.PASSWORD);password.setEchoChar('*');password.setTextLimit(16);passcheck=newText(this,SWT.BORDER|SWT.PASSWORD);passcheck.setEchoChar('*');passcheck.setTextLimit(16);7.3.2监听输入框中内容的修改一旦应用了SWT.PASSWORD样式,Text文本框就只能输入英文字符集内的字符了。但是密码不能少于6位,密码少于6位,就要在旁边提示信息中显示错误警告。要实现这个功能,首先给密码输入框添加一个ModifyListener(修改监听器)。7.3.3限制输入字符用户账号,限制只能输入英文和数字,包括下划线或者减号。要实现这个功能,就要使用VerifyListener。Verify事件是控件获得用户输入之后,在保存用户输入的文本内容前触发的事件。看上去好像和Modify事件差不多,都是在用户输入之后。Verify在Modify事件之前。7.4Label的用途Label也是个使用非常频繁的部件,在界面上需要用它来显示一些文字信息,例如最常用的就是说明界面上某个输入字段的名称。在SWT中,Label的用途还有很多。例如作为GridLayout中的占位部件,还可以用作分隔线。7.4.1简单标签最简单的标签就是显示文本信息,构造的时候不需要设置任何样式和属性。样式参数给一个SWT.NONE参数就可以了。然后用setText方法设置显示的文本。SWT的Label不会根据字符的变化自动伸展。7.4.2Label和CLabel在这个例子中,还可以看到另外一个标签部件CLabel。Label有一个缺陷,虽然具有setImage(Imageimage)这个方法,可以在标签上显示图标,但是一旦设置图标,就不能同时显示文字信息了。另外一个部件CLabel就解决了这个问题,可以同时显示图标和文字信息。7.4.3设置字体的颜色设置字体的颜色用setForeground(Colorcolor)方法,设置背景颜色用setBackground(Colorcolor)方法。在前面介绍SWT部件的继承关系时候,可以看到,Label等等部件都是继承自Control的,而setForeground和setBackground都是Control中就实现的方法,所以所有继承自Control的部件都有这两个方法设置字体的颜色和背景颜色。颜色的定义用的是Color对象。在后面关于SWT绘图的内容中会详细说明Color的使用。一般的应用可以不需要自己构造Color对象。在SWT中,已经预先定义了一批系统颜色。正如在例子中那样。用Display.getCurrent().getSystemColor(intcolor)这个静态方法就可以获得预定义的Color对象。getSystemColor的参数来自SWT中预定义的常量:COLOR_BLACK、。。。。。参考手册7.4.4标签的妙用在这个例子中,还看到标签的另外一种用法,就是把标签部件当作分隔线使用。要把标签变成分隔线只要构造的时候赋予SWT.SEPARATOR样式、以及分隔线的类型。例如:newLabel(this,SWT.SEPARATOR|SWT.HORIZONTAL);//这是横向分隔线;newLabel(this,SWT.SEPARATOR|SWT.VERTICAL);//这是竖线。7.5Group的应用下面再继续制作一个部件,这是一个输入员工资料的输入面板。在这个输入面板上,布满大量的输入字段,除了简单的文本输入框,还有单选框(RadioButton),下拉列表(Combo)。为了更好地组织这些输入字段,使用了Group部件来进行分组。通过制作这个部件,将会接触到几个新的SWT部件。包括Group、RadioButton。首先来学习一下Group的应用。7.5.1添加Group首先依然还是像前面的例子那样,先重载一个Composite。建立一些基本的方法,包括initlize()。根据需要还可以加上main()方法。main()方法复制上一个例子的就可以了。在这个例子中,将建立一个输入个人基本信息的编辑面板。面板左边是个人资料,包括姓名、性别、生日、身份证和学历。右边是关于工作的基本信息,包括工号、入职时间、职位、部门等等。7.5.2在Group上添加子部件在Group添加子部件需要做两步,第一步是设置Group部件的布局方式,第二步是在构造子部件时,把Group部件作为parent参数。7.6Button和Text的其他用法在这个例子中,还出现了几个新的部件RadioButton和TextArea、Spinner。其实Radio和TextArea都不是新的部件,RadioButton是Button的另外一种形态,TextArea是Text的另外一种形态。下面详细学习一下,如何通过设置Button好Text的样式来建立这些“变种”的部件。7.6.1Button的样式要把Button作为Radio使用,只要在构造的时候设定style参数为SWT.RADIO就可以了。Button还可以作为其他几种部件来使用。ARROW:CHECK:PUSH:RADIO:TOGGLE:7.6.2Button作为Radio使用作为Radio使用时,因为Radio也叫单选按钮,在一个容器部件中,如果出现多个Radio,那么永远只有一个处于选择状态。要判断那个处于选择状态,就要进行判断。例如在前面的例子中,要获得性别的选择,可以类似下面写一个获得性别选项的方法:publicbooleangetGender(){if(radioMale.getSelection()){//获得单选框的选择状态,进行判断,如果被选择,则返回truereturntrue;}if(radioFemale.getSelection()){returnfalse;}returntrue;}7.6.3Button作为检查框CheckBox下面是Button作为检查框的简单例子。只要将Button对象设置为SWT.CHECK属性就可以了。setText则是设置检查框右边显示的文本内容。checkBox=newButton(this,SWT.CHECK);//建立检查框checkBox.setText("Checkbox");//设置检查框的文本标签判断检查框的勾选状态用也是用getSelection()方法,被勾选,返回true,没有被勾选,返回false。设置选择状态则是用setSelection()方法。7.6.4Button作为箭头按钮把Button用作箭头按钮时,除了要设置SWT.ARROW样式外,还要同时组合使用SWT.CENTER、SWT.DOWN、SWT.LEFT、SWT.RIGHT几个样式。这个几个样式分别代表不同方向的箭头。下面的代码演示了几种箭头按钮的应用。arrowUP=newButton(this,SWT.ARROW|SWT.CENTER);Button(this,SWT.ARROW|SWT.DOWN);arrowLeft=newButton(this,SWT.ARROW|SWT.LEFT);arrowRight=newButton(this,SWT.ARROW|SWT.RIGHT);7.6.4Text作为TextArea使用在用户界面中,还有一个常用的部件就是多行文本输入框,通常称为TextArea。在其他一些UI系统中,TextArea可能是单独一种不见,而在Eclipse中,则是通过Text来实现,只要在构造Text的时候,添加SWT.MULTI样式,就是一个TextArea多行文本输入框了。7.7TabFolder的应用选项卡也是常用的用户界面。如果一个界面中有大量输入字段,最好的方法就是把这些输入字段进行分类,分成多个选项卡显示。在Eclipse中,用于建立选项卡的部件是TabFolder。单独依靠TabFolder还不能实现选项卡的功能,还需要TabItem的配合。下面就来学习使用TabFolder好TabItem建立选项卡。7.7.1建立TabFolder在这个例子中,要把前面制作的一系列Composite部件,通过TabFolder组合成一个编辑个人资料的编辑面板。7.7.3TabFolder的应用步骤在这个例子中,initTabs()方法负责建立选项卡。TabFolder的应用过程大概可以分成下面几步:第一步:建立TabFolder部件对象。tabFolder=newTabFolder(this,SWT.NONE);第二步:建立TabItem。第三步:以TabFolder作为parent参数建立每一页的部件。第四步:调用TabItem的setControl方法(),把第三步建立的子部件关联到对应的TabItem中。7.7.4TabItem的使用从例子中也可以看到,建立选项卡部件的关键是TabItem的使用。TabItem有下面几个关键的方法:publicvoidsetControl(Controlcontrol)publicvoidsetImage(Imageimage)publicvoidsetText(Stringstring)publicvoidsetToolTipText(Stringstring)7.7.5在底端显示活页标签默认情况下,活页的标签是显示在上方的。只要在构建TabFolder的时候,添加SWT.BOTTOM样式,就可以让标签显示在下方。7.8菜单和工具栏前面建立的都是一些输入部件,这些部件只能作为应用程序中的一部分来使用。要建立一个真正的GUI应用程序,还需要建立一个应用程序窗口。在这个应用程序窗口中,需要有菜单和工具栏。下面就来学习一下SWT是如何实现菜单和工具栏的。7.8.1建立包含菜单和工具栏的程序在窗口中建立菜单栏的过程有点繁琐。在这个例子中,将建立一个浏览器程序,程序的中间是一个浏览器部件Browser,上面是菜单和工具栏。7.8.2建立菜单栏现在这段代码只是编写了一个框架,createMenu()和createToolBar()都还没有实现。先来实现菜单。要建立菜单,需要使用Menu和MenuItem。建立菜单栏大概分成下面几个步骤:第一步,新建一个Menu对象,设置为shell的menubar,这个Menu对象就成为窗口的菜单栏了;第二步,为这个菜单栏添加多个MenuItem,这些MenuItem就是菜单栏上的各个子菜单;第三步,分别以这些MenuItem为parent参数,建立Menu对象,并用MenuItem的setMenu()方法建立关联;第四步,分别为每个MenuItem中的Menu对象添加菜单命令,每个菜单命令是一个MenuItem对象。如果需要建立子菜单,重复上面第二步开始的过程。7.8.3Menu和MenuItem的样式Menu和MenuItem各自都有多种样式,例如在上面建立菜单栏的时候,要把Menu设置为菜单栏,样式就是BAR,下面是Menu的样式:BAR:DROP_DOWN:POP_UP:

温馨提示

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

评论

0/150

提交评论