J2ME用户界面2020年3月5日2主要内容用户界面库的体系结构Display类事件处理Alert类List类-列表TextBox类-文本框Form-表单用户界面库的体系结构javax.microedition.lcdui2020年3月5日3DisplayableScreenCanvasAlertFormListTextBoxGameCanvas用户界面库Screen类是高级图形用户界面的父类,使用该类实现的用户界面无需修改就可以在所有支持Java的手机上显示。Screen类的四个子类分别是TextBox,List,Alert和Form。TextBox,List,Alert是预定义类型的组件。Form类是开放的容器类型,可以容纳Item类型的组件以便构成复杂的图形用户界面2020年3月5日4Display类获取Display对象利用Display类所提供的静态方法getDisplay()•display=Disp•lay.getDisplay(this);MIDP中规定每个MIDlet程序只能拥有一个Display对象2020年3月5日5Display对象一个Display对象却可以拥有多个在屏幕中显示的Displayable对象,即Screen对象和Canvas对象当前的Displayable指的是当应用在前台时,用户所见的那个Displayable对象。在MIDlet程序中对Display实例所做的最多的操作应该是设置当前的Displayable对象。Display.setCurrent();2020年3月5日6实例在界面类中实现切换界面UIConvert.javaFirstScreen.javaSecondScreen.java2020年3月5日7事件处理在MIDP中,事件处理分为低级事件处理和高级事件处理低级事件主要指机器上的按钮被按下或触摸屏被触动时所产生的事件高级事件处理是指通过类似菜单命令的方式来接收用户输入•当用户按下手机的功能键时,屏幕上应该有命令菜单弹出来,然后由用户选择需要执行的命令2020年3月5日8事件处理原理事件处理原理就是回调机制事件监听接口当用户触发事件发生的时候,事件监听接口对应方法会被调用,来处理相关的操作2020年3月5日9命令(Command)一个Command实际上就是一个用户按下设备的某个按钮所产生动作的信息的入口或用户动作的触发器。命令信息被保存在一个Command对象中。一个Command对象包含三部分信息:label(命令标签)type(命令类型)priority(命令优先级)2020年3月5日10创建Command对象创建Command对象newCommand(退出,Command.EXIT,1)其中,第一个参数是命令标签,第二个参数是命令类型,第三个参数是该命令的优先级(1代表优先级最高)命令类型可以是下列8个值之一•Command.BACK:返回前一屏幕;•Command.CANCEL:取消当前正在进行的工作;•Command.EXIT:退出应用程序;•Command.HELP:请求在线帮助;•Command.ITEM:选择命令是当前屏幕中的某一项;•Command.OK:确定当前正在进行的动作;•Command.SCREEN:应用到当前屏幕的命令;•Command.STOP:中断当前正在运行的动作。2020年3月5日11建立Command对象关联Command对象只有与具体的Displayable对象以及执行代码进行关联才能发挥作用。所谓关联是指将Command加入到屏幕显示中使用Displayable的addCommand()方法。这样就可以通过按钮、菜单或其他合适的机制进行用户界面或应用程序行为的控制当用户按下与Command相对应的按钮时,一个触发事件就会产生。为了使应用程序能够接收到该事件,必须在Displayable上注册一个命令监听器CommandListener2020年3月5日12CommandListener接口CommandListener接口只定义了一个事件处理方法voidcommandAction(Commandc,Displayabled)如用户按下了一个Command,事件监听接口CommandListener对应方法commandAction()会被调用,来处理相关的操作2020年3月5日13Alert类在MIDP中,模式对话框称为提醒(Alert),它主要用于在屏幕上向用户显示关于异常情况或错误的信息。Alert类的构造方法publicAlert(Stringtitle)publicAlert(Stringtitle,StringalertText,ImagealertImage,AlertTypealertType)创建一个alert时,会有一个计时器,使用默认的timeout值getDefaultTimeout()方法setTimeout()方法,以毫秒为单位2020年3月5日14Alert对象的类型Alert对象的类型有5种AlertType.ALARM:警报类型;AlertType.CONFIRMATION:警告类型;AlertType.ERROR:错误类型;AlertType.INFO:信息提示类型;AlertType.WARNING:警告类型。2020年3月5日15实例AlertDemo.java2020年3月5日16List类-列表列表(List)类用于显示一系列的字符串和可选的图像。用户可以在列表中移动并选择一个或多个选项,然后通过触发一个命令来完成相应的操作。List类构造方法如下。publicList(Stringtitle,intlistType)publicList(Stringtitle,intlistType,String[]stringElements,Image[]imageElements)2020年3月5日17列表类型三种类型列表可以选择:IMPLICIT,EXCLUSIVE和MULTIPLE。可以通过使用Choice接口提供的常数来指定•Choice.EXCLUSIVE(单选)类型的list•Choice.IMPLICIT(隐含式菜单)类型的list•Choice.MULTIPLE(多选)类型的list下面的语句生成一个EXCLUSIVE类型的list,标题是Exclusive的空列表。Listlist=newList(Exclusive,Choice.EXCLUSIVE);2020年3月5日182020年3月5日19图2-4单选模式的List图2-5隐含模式的List图2-6多选模式的List列表类型List对象操作List对象可进行append(追加)、insert(插入)、set(设置)、delete(删除)、检索等操作publicintappend(StringstringPart,ImageimagePart)publicvoidinsert(intelementNum,StringstringPart,ImageimagePart)publicvoidset(intelementNum,StringstringPart,ImageimagePart)publicvoiddelete(intelementNum)publicStringgetString(intindex);publicImagegetImage(intindex);publicintgetSelectedIndex()publicintgetSelectedFlags(boolean[]selectedArray_return)2020年3月5日20List类使用示例ListDemo.java2020年3月5日21TextBox类-文本框文本框类TextBox是显示给用户的,可以用于输入小于指定长度的文本的界面控件。TextBox是一个容器类型的对象。构造方法如下。TextBoxtext=newTextBox(Stringtitle,Stringtext,intmaxSize,intconstraints)2020年3月5日22输入数据的约束构造器参数constraints是对于输入数据的一组约束,其值可以是下列6个值之一。TextField.ANY:允许输入任何字符或数字;TextField.EMAILADDR:允许输入电子邮件地址;TextField.NUMERIC:只允许输入数字;TextField.PHONENUMBER:只允许输入电话号码的格式;TextField.URL:允许输入URL形式的字符串;TextField.DECIMAL:输入内可以通过Double.valueOf()来转换。2020年3月5日23TextBox方法存取、删除、插入、替换等操作publicvoidsetString(Stringtext)publicStringgetString()publicvoidsetConstraints(intconstraints)publicintgetConstraints()publicvoiddelete(intoffset,intlength);publicvoidinsert(char[]data,intoffset,intlength,intposition);publicvoidinsert(Stringsrc,intposition);publicvoidsetChars(char[]data,intoffset,intlength);2020年3月5日24TextBox类使用示例TextBoxDemo.java2020年3月5日25Form-表单表单(Form)是一个可以放置一组子项(Item)的容器类型,其子项都是独立的用户接口组件,包括只读的和可编辑的文本框、图像、日期域、gauge以及选项组组件等抽象类Item的子类对象Form对象负责安排子项显示的具体内容,如位置、大小等。通常Form对象与一个列表一样从顶到底安排它所包含的各子项。2020年3月5日262020年3月5日27ItemChoiceGroupCustomItemDataFieldGaugeImageItemSpacerStringItemTextFieldItem类及组件Form类的构造Form类的构造方法如下:publicForm(Stringtitle);publicForm(Stringtitle,Item[]items);用户可以表单中的各个项可以进行编辑操作,如插入,添加和删除。2020年3月5日28SpacerSpacer是专门用来在Form上边加入一些空白间隔。它不能与用户交互。构造方法如下:newSpacer(intminWidth,intminHeight);第一个参数是空白间隔的宽度;第二个参数是空白间隔的高度。Spacer类使用示例:SpacerDemo.java2020年3月5日29CustomItem定制项目(CustomItem)可以创立自己的窗体项目。CustomItem是一个介于高级和低级之间的用户界面,通常称它为增强型图形用户界面。可以添加到Form中,且可以通过实现一系列的抽象方法来绘制自己,这样就可以对用户交互进行细粒度的控制,并实现一个可以适应现有的窗体框架,符合设备本身尺寸的用户界面。2020年3月5日30CustomItem类CustomItem类的构造方法protectedCustomItem(Stringlabel)参数label是CustomItem名称。CustomItem类定义有如下5个必须实现的抽象方法protectedabstractintgetMinContentHeight()//返回最小高度protec