第4章高级用户界面及事件处理_第1页
第4章高级用户界面及事件处理_第2页
第4章高级用户界面及事件处理_第3页
第4章高级用户界面及事件处理_第4页
第4章高级用户界面及事件处理_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

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

文档简介

第4章高级用户界面及事件处理

MIDP用户界面API的结构4.1Command和高级事件处理4.2高层用户界面4.3基本控件编程实例4.4小结4.54.1MIDP用户界面API的结构

图形用户界面是应用程序和用户交互的接口,一个好的用户界面应该做到:操作方便、易懂、美观。

它通常包括图形和文字。手机的性能特点决定了手机平台无法实现类似Windows的用户界面。

MIDP提供了一套完整的用户界面接口,全部定义在javax.microedition.lcdui包中。图4-1所示为用户界面类的阶层体系。

图4-1MIDP用户界面类的体系

Displayable的子类有两种。(1)Canvas(2)Screen4.2Command和高级事件处理

在Java程序中,实现和用户交互功能的控件都是通过事件来处理的,这就需要指定控件所用的监听器。

javax.microedition.lcdui包中定义了Command和CommandListener,使用它们可以很好的处理高级事件。一般是指按钮事件,比如用户按下键盘某键。

Command类用于实现应用程序的特定操作。它必须被添加到一个Displayable对象上,当这个Displayable被显示时,所有相关的Command都会显示在手机界面下方的左右两侧。

当用户选择一个Command后,与当前Displayable对象相关的CommandListener就会自动被调用,就可以在CommandListener对象的CommandAction(Commandc,Dispayabled)方法中处理命令。

创建新的Command对象需要调用Command类的构造方法,其构造方法语法如下:newCommand(Lablesl,Typet,Priorityp);其中Lables表示在屏幕上显示的文字。

Type指定了Command对象的类型,具体类型如表4-1所示,参数“Priority”定义了Command对象的重要指数,数值越小表示越重要,数值越小的命令对象会安排在屏幕的左边。

当创建了很多命令对象的时候,数值大的会安排在右边的菜单中,当数值相同的时候,会使用方法本身默认的数值。

表4-1 命令类型表

图4-2多个Command合并到一个菜单4.3高层用户界面

高层用户界面API是为了那些客户组件运行在移动信息设备上的商业程序设计的。对这些应用程序而言,设备间的可移植性非常重要。

为了达到这样的可移植性,高层的用户界面API使用了更高的抽象,而且极少提供观感的控制。对高层MIDP用户界面API而言,这就使设备可以使用本地的用户界面观感。

这意味着当一个应用程序使用高层API编写时,它的观感自动使用当前程序所运行的设备上的观感。对终端用户而言,这提供了无缝的用户交互:MIDP应用程序和设备上其他的(本地)应用程序以相同的方式工作。

高层用户界面有以下特点。(1)在显示屏上的绘图由设备系统软件执行。应用程序并不定义组件的虚拟外观(例如形状、颜色等)。

(2)导航、卷动和其他一些与用户界面组件的原始交互由设备来进行。应用程序不用了解这些交互。(3)应用程序不能访问如个别按键等具体的输入机制。

高层的API通过Screen类及其如下子类提供。

List:允许从一个预定义的选择集中选择。

TextBox:是一个拥有可控制编辑方法的文本编辑器。

Alert:显示临时信息或者简单选择问询。

Form:更宽泛的容器,允许显示多个密切相关的叫做Item的用户界面元素。

当带一个方法的screen不够时,就轮到Form类派上用场了。类Form被设计来保持少量紧密关联的用户界面项目(或者称Item)。

例如,一个应用程序也许有两个TextField或者一个TextField和一个简单ChoiceGroup。

如果一个Form的所有元素不能完全显示在屏幕上,那么实现也许会让Form可卷动,当用户编辑它的时候自动扩展Item,或者使用一种弹出式的显示方式。

每个Form都可以保持下面Item子类的组合。

StringItem:用于静态文本显示,或者作为一个按钮或超链接。

ImageItem:用于静态图像显示,或者作为一个图像按钮或超链接。

TextField:用于带约束的文本类型输入。

DateField:用于时间或者日期值的显示或输入。

Gauge:用于进度条或者来自某个特定范围的数值输入。

ChoiceGroup:用于一个元素集合的单选或多选。

CustomItem(MIDP2.0):用于创建特定应用程序的Item;绘图通过底层Graphics应用程序接口完成。

Spacer(MIDP2.0):用于为层创建空的空间。

虽然Form类允许任意组件组合的创建,开发人员应该牢记移动设备显示尺寸有限,尽量让Form简单、功能单一。4.4基本控件编程实例

4.4.1列表List

本节介绍的是Screen的一个子类List,它一共有三种具体的类型:implicit(简易式),exclusive(单选式),multiple(多选式)。

与List元素相关的应用程序操作一般可概括为ITEM型命令(在后续章节将会有详细介绍)或者SCREEN类型命令,其作用域范围的判断依据是看该操作是影响到被选择原则元素还是整个List。

List对象上的操作包括insert、append和delete,用于约束List具体类型的类是ChoiceGroup,List中的元素可以用getString、insert、set、append、delete、getImage等方法来具体操纵。

对于项目的选择我们则使用getSelectedIndex()、setSelectedIndex()、getSelectedFlags()、setSelectedFlags()和isSelected()来处理。

创建一个List屏幕类的对象可以使用两种构造方法:(1)List(Stringtitle,intlistType)(2)List(Stringtitle,intlistType,String[]stringElements,image[]imageElements)

1.Exclusive(单选式)

图4-3单选式List

2.Implicit(隐含式)

图4-4隐含式List

3.Multiple(多选式)

图4-5多选式List

4.4.2TextBox

当我们要在移动设备上输入数据时,TextBox(见图4-6)就派上用场了,创建一个TextBox我们必须使用它的构造方法。

TextBox的构造方法如下:

TextBox(Stringtitle,Stringtext,intmaxSize,intconstraints)。

其中参数共有四个,第一个是Title,即标题,第二个是TextBox的初始内容,第三个是允许输入字符的最大长度,第四个是限制类型,限制类型有下列6个。

图4-6TextBox

ANY:允许输入任何文本。

EMAILADDR:允许输入一个E-mail地址。

NUMERIC:允许输入一个整数。

需要注意的一点是:一个TextBox必须附加一个命令,否则,用户将不能激发任何行为,而陷入这个TextBox中。

4.4.3AlertAlert用来提醒用户关于错误或者其他异常情况的屏幕对象,这个警告只能作为简短的信息记录和提醒,如果我们需要长一点的,我们可以使用其他的Screen子类,最常见的是Form。

同时我们顺便提一下跟它相关的一个类AlertType,需要提醒读者注意的一点是AlertType是一个本身无法实体化的工具类(即不能像Form那样产生具体的对象)。

创建一个Alert对象需要用到它的构造方法,Alert的构造方法有两个。

(1)Alert(Stringtitle);(2)Alert(Stringtitle,StringalertText,ImagealertImage,AlertTypealertType);

其中,参数“title”指定了Alert屏幕的标题,参数“alertText”指定了Alert屏幕要显示的信息,参数“alertImage”指定了Alert屏幕要显示的图片,参数“alertType”指定了Alert的类型。

Alert的类型共有下列5个。

ALARM:提示已经通知系统处理用户的请求。

CONFIRMATION:提示用户确认。

ERROR:提示错误信息。

INFO:提供给用户非威胁性的信息。

WARNING:警告用户在进行有潜在危险的操作。

Alert是一个比较特殊的屏幕对象,当我们在setCurrent()方法中调用它的时候,它会先发出一段警告声音,然后才会显示在屏幕上,过了一段时间之后,它会自动跳回之前的画面。

需要注意的是必须在使用setCurrent()显示Alert之前定义好它可以跳回的画面,否则会发生异常。

在Alert中可以通过setTimeout()方法来设定间隔的时间,通过setType()来调用我们上面提到的四种类型,setImage()用来定义图片,setString()用来定义内含文字,同时还可以通过getType(),getImage(),getString()来取得相应的对象。

可以利用setTimeout()来定义Alert显示的时间,当Alert在屏幕上显示了指定的时间间隔后,它会跳回我们指定的屏幕对象,或回到前一个屏幕。

如果我们调用setTimeout()时传入Alert.FOREVER作为参数,那么除非用户按下指定按键,否则,屏幕会一直显示这个Alert。如果在一个定时的Alert中只有一个命令,那么超时发生时命令会自动激活。

图4-7Alert

4.4.4Form概述

Form是J2ME里面一个比较重要的容器类型,可以说是集中了高级UI中的精华,是开发当中常常用到的一个关键类,图4-8很好地说明了FORM及其相关子类的关系。

我们通常是往Form里面添加各种Item的子类(使用append()方法),从而达到让画面更加丰富的目的,每一个Item的子类在同一时刻只能属于同一个容器,否则会引发异常。

创建一个Form很简单,如:FormmainForm=newForm(“HelloWorld”)。

现在我们通过append()方法添加新的控件,如添加一个TextField类型控件:mainForm.append(newTextField(“helloworld”,null,23,TextField.ANY))。

图4-8FORM及其相关子类的关系

在Form画面中,我们通过Item.LAYOUT_LEFT、Item.LAYOUT_CENTER和Item.LAYOUT_RIGHT来控制各个Item在Form中的位置,通过这几个参数的字面意思我们很容易明白分别是左、中、右。

在不设定的情况下,Item会依照LAYOUT_DEFAULT来绘制,如果我们希望自己来设定等效线,可以用setLayout()方法来控制。同时,Form缺省的设定会在空间足够的情况下,可能让Item出现在同一个逻辑区域中。

如果组件在显示时,比我们预期的最大的尺寸要大或比预期的最小尺寸更小,那么系统会自动忽略我们之前的设定,转而采用最大尺寸或者最小尺寸,这时系统会自动调用setPreferredSize(),将预期尺寸设置好。

4.4.5StringItem及ImageItem

1.StringItemStringItem的作用,就是在屏幕上显示一串字,配合不同的外观类型,StringItem有两个构造方法。

(1)publicStringItem(Stringlabel,Stringtext)(2)publicStringItem(Stringlabel,Stringtext,intappearanceMode)

最长见的是需要三个参数的,第一个是Label,第二个是内容,第三个则是外观。

外观共分三种:PLAIN(默认类型),BUTTON(按钮类型),HYPERLINK(超级链接类型)。

只需两个参数的构造方法等同于使用PLAIN的外观的三个参数的构造方法。

对于外观的提取,我们可以使用getAppearanceMode()取得,以此类推,需要修改或得到相应的参数只需进行相应的set或get操作即可。

我们可以把Item和其他的高级UI部分结合起来,这样也是对我们学习的一种促进。

图4-9StringItem

其中用到最多的是5个参数的构造方法,第一个是该Item的Label,第二个是图片,第三个是等效线,第四个是取代的文字(图片无法显示时),第五个是外观(和StringItem相同)。

4.4.6CustomItemCustomItem是Item中一个比较重要的子类,它最大的优点是提高了Form中的可交互性。

它和Canvas有很大的相似处。我们通过改写CustomItem可以实现完全控制在新的子类中条目区域的显示,它可以定义使用的颜色,字体和图形,包括特殊高亮的条目可能有的所有的焦点状态,只有条目的Label是由系统控制生成的,但是Label总是生成在CustomItem的内容区域外。

每个CustomItem都负责把它的行为与目标设备上可用的交互模式匹配。一个CustomItem调用方法来观察特定设备所支持的交互模式,这个方法会返回一个支持模式的位标记,支持的模式对应会被设置,不支持的不被设置。

CustomItem一个比较重要的特性即是Form内部的遍历,即实现可能临时把遍历的责任委派给Item本身,这样可以实现特殊的高亮、动画等效果。由于customItem在Form类里扮演很重要的角色,其内容很庞杂。

4.4.7TextField和DateFieldTextField和我们前面讲的TextBox大同小异,只是它是作为Form的一个子类存在,而TextBox则是和Form平起平坐。

DateField的目的是方便用户输入时间,DateField有两个构造方法:(1)DateField(Stringlabel,intmode)(2)DateField(Stringlable,intmode,TimeZonetimeZone)

运行结果如图4-10所示。(1)DateField(Stringlabel,intmode)(2)DateField(Stringlable,intmode,TimeZonetimeZone)

图4-10TextField

其中,参数label指定了控件的标题;参数mode指定了控件的类型,共有三种类型:DATE、TIME和DATE-TIME类型;参数timeZone指定了时间的时区。具体用法和TextField类似,这里就不再举例了。

4.4.8Gauge、Spacer和ChoiceGroup1.Gauge

Alert有一套方法可以显示进度,利用setIndicator()/getIndicator()这组方法,可以显示进度的画面。Gauge的最大用处就是拿来当进度显示使用。

拿来当进度显示用的Gauge对象必须满足如下要求。

控制与用户交互的构造方法的第二个参数必须为false。

不能被其他的Form或者Alert使用。

不能加入Command。

不能有Label。

不能自己设定等效线的位置。

不能自己设定组件的大小。

Gauge的构造方法如下所示:Gauge(Stringlable,Booleaninteractive,intmaxValue,intinitialValue)

其中,参数“lable”指定了控件的标题属性,参数“interactive”指定了控件的类型。Gauge控件有两种类型:一种是交互类型,即用户可以通过键盘控制进度条的进度;一种不是交互类型,只能通过程序控制进度条的进度。

参数“maxValue”指定了最大值,参数“initialValue”指定了初始值。值得注意的是最大值并不是方格的个数,而是会根据屏幕的大小自动调整的。

图4-11Gauge

2.SpacerSpacer是一个显示空白信息的控件,功能是作为间隔其他控件的空白地带。主要用于多个控件之间的布局。它的构造方法如下:

Spacer(intminWidth,intminHeight)

其中,参数“minWidth”设置了Spacer控件的最小宽度,参数“minHeight”设置了Spacer控件的最小高度。

3.ChoiceGroupChoiceGroup和List大同小异,因为两者都实现了Choice接口,不同的是ChoiceGroup是一个Item控件,只能放在容器内才能够在屏幕上显示和使用。

ChoiceGroup控件有两个不同的构造方法:(1)publicChoiceGroup(Stringlabe

温馨提示

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

评论

0/150

提交评论