欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    MIDP高级界面编程 (2).ppt

    • 资源ID:6512469       资源大小:392KB        全文页数:101页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    MIDP高级界面编程 (2).ppt

    第6章 MIDP 高级界面编程,郝玉龙E_mail:,J2ME移动应用开发电子讲义,6.1 LCDUI体系结构概述6.2高级用户界面编程基础6.3 Command处理机制6.4 Screen对象6.5 List组件6.6 TextBox组件6.7 Alert组件6.8 Form类小结,6.1 LCDUI体系结构概述,为适应种类繁多的移动信息设备,CLDC本身没有定义任何GUI功能,而是由J2ME将所有与界面相关的类库都定义在简表(例如MIDP)中,这样在更大程度上包含了保证了界面类库的适应性。,6.1.1 LCDUI 工作模型,第一步:为了在MIDP 设备上显示信息,需要取得设备的显示屏幕。Display对象代表的是移动设备显示屏幕,每个MIDlet 都有且仅有 Display 对象的一个实例。Display 对象实质上是设备显示屏的管理程序,它控制在设备上显示什么内容。在J2ME程序中只有一个Display的引用,通过静态方法Display.getDisplay(MIDlet midlet)得到。,第二步:通过Display的引用程序开发人员可以得到当前设备屏幕的一些信息,比如色彩之类,但是最常用的方法是通过Display的setCurrent()方法将抽象屏幕对象绑定到当前设备屏幕上来显示。图形用户界面开发中更多的工作是实现抽象屏幕对象,由抽象屏幕对象封装和管理实现程序与用户之间交互的图形界面组件如文本框、选择框列表等。当使用高级图形API时,抽象屏幕由对象代表,当使用低级屏幕API时,抽象屏幕由对象代表。应用程序可以包含几个抽象屏幕对象,不过某一时间只能在显示器上显示一个屏幕(或者说只有一个当前屏幕)。,图61 LCDUI体系结构,图61 LCDUI体系结构,为了实现可移植性,高层API 进行了高度抽象,在界面外观上提供的控制很少。例如,不允许定义高层组件的视觉外观(形状、颜色或字体),与组件之间的大多数交互都被实现封装,即由底层实现而不是应用程序完成对设备硬件和本地用户界面类型的适应工作。因此,如果使用高级API,那么用户界面就具有较高移植性。但是高级API提供的组件都会由底层的虚拟机直接映射到该设备的本地用户界面,所以程序开发人员无法决定最终显示到设备屏幕上时组件的颜色、字型和外观,因为这些细节都是由系统决定,程序开发人员对画面的控制程度相对较低。另外,采用高级API开发的用户界面,与用户的交互都会遵循该移动设备既有用户界面的操作方式。所以,采用高级用户界面开发的应用,如果发布到不同类型的移动设备上,用户界面的外观和交互方式出现一些差异是很正常的。,使用低级API开发应用就相对复杂。低层API提供很少的抽象。使用它们的应用程序需要精确地布局和控制图形元素,同时还需要访问低层输入事件。使用低级API时,将对移动设备的显示屏幕具有完全的控制权,同时也能够决定用户该如何与程序交互,因此程序开发人员考虑的细节就比较多。由于每种设备都有不同的特性(不同的操作方式、颜色和大小),因此一旦采取低级API,程序的可移植性将大大降低,将不再保证程序可以在不同的机器上执行。,6.2高级用户界面编程基础,6.2.1 Display对象 MIDP使用Display对象进行用户界面的管理,负责与应用程序管理器进行交互。Display代表了系统显示屏和输入设备的管理器,包含用来获取设备属性的方法,以及请求在设备上显示抽象屏幕对象的方法。,表61 Display对象常用方法,程序61:DisplayTest.javapackage chap6;import;import;import;public class DisplayTest extends MIDlet Display display=null;public DisplayTest()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);int colors=display.numColors();boolean iscolor=display.isColor();boolean s=display.flashBacklight(2500);if(!s)(您的设备不支持背景灯控制);s=display.vibrate(500);if(!s)(您的设备不支持震动);if(iscolor)(您的设备是彩色显示设备);else(您的设备不是彩色显示设备);(您的设备支持+Integer.toString(colors)+种颜色);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,6.2.2 Displayable对象,在显示屏设备上显示的用户界面对象为Displayable对象,在同一时刻应用程序最多只能有一个Displayable对象,这个Displayable对象显示在显示屏设备上,并通过它与用户进行交互,这个被引用的Displayable对象被称为当前Displayable对象。从图 61可知,所有的GUI组件都实现了抽象类Displayable。,程序62:DisplayableTest.javapackage chap6;import;import;import;import;public class DisplayableTest extends MIDlet Display display=null;Form f;public DisplayableTest()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);f=new Form(Displayable测试);display.setCurrent(f);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,6.2.3 Ticker对象,Ticker对象实现了在屏幕上连续滚动的滚动条或小段文本。Ticker 与在本节讨论的其他组件有一些不同,它不是 Screen 的子类。相反,它是在Displayable 类中定义的一个变量。因此,所有从Displayable派生出的对象都可以显示一个Ticker。因此Ticker既可以使用在高级用户界面API中,也可以使用在低级用户界面API中。,程序63 TickerTest.javaimport;import;import;import;import;public class TickerTest extends MIDlet Display display=null;Form f;public TickerTest()super();f=new Form(Ticker 测试);protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);f.setTicker(new Ticker(你好.);display.setCurrent(f);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,6.3 Command处理机制,MIDP定义了抽象的Command机制来实现与设备的命令交互接口,而具体的实现根据与该设备相适合的机制来提供支持。对于开发者来说,Command对象就类似于普通GUI编程的button,可以设定其标题,如确定、取消等。当用户调用该Command时,应用程序会做出适当的响应。而具体Command如何在屏幕上显示以及如何与具体设备的按键等建立联系是MIDP实现的责任,开发者不需要考虑 Command既适用于高级API(Screen类),又适用于低级API(Canvas类),Command类有两种构造函数,一个有三个参数,另一个则是四个参数。区别在于:前者第一个参数是显示在画面上名称,第二个参数是命令的类型,第三参数是优先权,以自然数形式表示,如:1,2,3,越小优先权越高,代表Command将在屏幕越显眼的地方显示。而后者则是在前者的基础上增加了一个长命令的参数,具体位置位于前者第一和第二个参数之间。Command的类型共分为8种:Command.BACK,ommand.EXIT,Command.CANCEL,Command.HELP,Command.ITEM,Command.OK,Command.SCREEN,Command.STOP。,程序64:CommandTest.javaimport;import;import;import;import;public class CommandTest extends MIDlet private Display display;public CommandTest()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);Form f=new Form(Command测试);Command c1=new Command(Comm_1,Command.BACK,2);Command c2=new Command(Comm_2,Command.BACK,1);f.addCommand(c1);f.addCommand(c2);display.setCurrent(f);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,程序65:CommandTest2.javaimport.*;import;import;public class CommandTest2 extends MIDlet private Display display;public CommandTest2()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);Form f=new Form(Command测试);Command c1=new Command(启动,启动应用程序,Command.BACK,1);Command c2=new Command(退出,退出应用程序,Command.OK,2);f.addCommand(c1);f.addCommand(c2);display.setCurrent(f);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,在屏幕上仅仅显示出这些Command是没有任何意义的,程序开发人员必须还要将Command类和底层的事件处理方法关联起来,这样才能响应用户的操作。类Command对个用户动作的语义信息进行封装,而命令动作的行为没有封装进这个对象,也就是说命令只包含了“命令”描述信息,而不是命令被激活时所实际发生的动作,命令的动作在Displayable对象实例所绑定的接口CommandListener中定义。Command的事件处理模式采取的是标准的Listener模式,需要使用Displayable对象的setCommandListener()方法来注册Command的Listener。方法如下:public void setCommandListener(CommandListener l),用 Command 对象实现用户交互的基本步骤如下所示:创建一个 Command 对象。将这个 Command 添加到 Form、TextBox、List 或者 Canvas 上。创建一个Command监听器,它必须实现CommandListener接口。通过调用 setCommandListener(CommandListener l)方法将监听器注册到UI组件。当用户与UI组件交互,MIDP实现触发Command命令。注册到UI组件的监听器调用commandAction()方法来对Command命令作出响应。用这个方法可以确定是哪一条命令生成了这个事件并对它进行相应处理。,程序66:CommandTicker.javaimport;import;import;import;import;import;import;import;public class CommandTicker extends MIDlet implements CommandListener private Display display;private Form f;public CommandTicker()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);f=new Form(Ticker测试);Command start=new Command(开始,Command.OK,1);Command stop=new Command(退出,Command.EXIT,1);f.addCommand(start);f.addCommand(stop);f.setCommandListener(this);display.setCurrent(f);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException public void commandAction(Command c,Displayable s)String cmd=c.getLabel();if(cmd.equals(开始)f.setTicker(new Ticker(运行中.);else if(cmd.equals(退出)f.setTicker(null);,6.4 Screen对象,所有的高级用户界面组件都是基于Screen类。Screen是一个封装了设备相关图形用户输入接口的对象。然而,Screen仅是一个有其自身一些功能的抽象类。每个Screen有两个属性:标题和ticker。标题是显示在screen 内容之上的一个字符串。在实际的应用开发过程中,一般不直接使用Screen对象,而是使用Screen的4个直接子类:TextBox、List、Alert和Form。其中Alert、List和TextBox代表一个完整的抽象屏幕,它们不能有父容器的,必须要独占屏幕。,6.5 List组件,6.5.1 Choice接口接口定义了这样一个用户界面组件的API:实现了从预定义的数个选项中进行选择,Choice的内容由字符串表示,也可用图像表示。,表62 Choice接口的主要字段和方法,Choice 对象可以分为3大类:单选类型:每次必须选中一个元素且只能选中一个元素简易类型:同单选类型一样,每次必须选中一个元素且只能选中一个元素,并且用户在不同的元素间切换选项时,会自动触发一个Command命令。多选类型:用户可在显示的一系列元素间选择任意数量的元素。,程序67:ExclusiveList.javaimport javax.microedition.lcdui.*;import;import;public class ExclusiveList extends MIDlet implements CommandListener private Display display;public ExclusiveList()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);List l=new List(List测试,Choice.EXCLUSIVE);l.append(语文,null);l.append(数学,null);l.append(英语,null);l.setSelectedIndex(1,true);l.addCommand(new Command(确定,Command.OK,1);l.setCommandListener(this);display.setCurrent(l);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException public void commandAction(Command c,Displayable s)String cmd=c.getLabel();if(cmd.equals(确定)List l=(List)s;int i=l.getSelectedIndex();(您选择了第+i+个选项);String con=l.getString(i);(选项的名称为+con);,程序68:ExclusiveImageList.javaimport.*;import;import;public class ExclusiveImageList extends MIDlet implements CommandListener private Display display;public ExclusiveImageList()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);Image img=null;try img=Image.createImage(/ok.png);catch(Exception e)System.out.println(e);List l=new List(List测试,Choice.EXCLUSIVE);l.append(语文,img);l.append(数学,img);l.append(英语,img);l.addCommand(new Command(确定,Command.OK,1);l.setCommandListener(this);display.setCurrent(l);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException public void commandAction(Command c,Displayable s)String cmd=c.getLabel();if(cmd.equals(确定)List l=(List)s;int i=l.getSelectedIndex();(您选择了第+i+个选项);String con=l.getString(i);(选项的名称为+con);,程序69:ImplicitList.javaimport.*;import;import;public class ImplicitList extends MIDlet implements CommandListener private Display display;public ImplicitList()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);List l=new List(List测试,Choice.IMPLICIT);l.append(语文,null);l.append(数学,null);l.append(英语,null);l.addCommand(new Command(确定,Command.OK,1);l.setCommandListener(this);display.setCurrent(l);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException public void commandAction(Command c,Displayable s)if(c=List.SELECT_COMMAND)List tmp=(List)s;int selected=tmp.getSelectedIndex();(第+selected+个选项被选择);else String cmd=c.getLabel();if(cmd.equals(确定)List l=(List)s;int i=l.getSelectedIndex();(第+i+个选项被确认);String con=l.getString(i);(内容为+con);,程序611:MultipleList.javaimport.*;import;import;public class MultipleList extends MIDlet implements CommandListenerprivate Display display;public MultipleList()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);List l=new List(List测试,Choice.MULTIPLE);l.append(语文,null);l.append(数学,null);l.append(英语,null);l.setSelectedIndex(1,true);l.addCommand(new Command(确定,Command.OK,1);l.setCommandListener(this);display.setCurrent(l);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException public void commandAction(Command c,Displayable s)String cmd=c.getLabel();if(cmd.equals(确定)List l=(List)s;int size=l.size();for(int i=0;i size;i+)if(l.isSelected(i)(第+i+个选项被选择);,6.6 TextBox组件,TextBox对象是一个允许用户输入和编辑文本的screen。可以通过指定四个参数给TextBox的构造器来创建一个TextBox 对象:public TextBox(String title,String text,int maxSize,int constraints);title被复用作该screen的标题,参数text和maxSize用于指定初始(缺省的)文本和该文本框的最大尺寸。最后,constraints参数可用于限制用户的输入。Constraints取值为TextBox类的静态常整型常量,由TextField和TextBox类共享使用。限制区分类型分为2类,一类是限制TextBox所能存储的内容。,表63 TextBox的内容限制类型,表64 TextBox的系统属性限制类型,表65 TextBox对象的主要方法,程序613:TextBoxTest.javaimport.*;import;import;public class TextBoxTest extends MIDlet implements CommandListener private Display display;public TextBoxTest()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);TextBox tb=new TextBox(TextBox测试,10,TextField.ANY);int maxsize=tb.getMaxSize();(最大长度:+maxsize);tb.addCommand(new Command(确定,Command.OK,1);tb.setCommandListener(this);display.setCurrent(tb);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException public void commandAction(Command c,Displayable s)String cmd=c.getLabel();if(cmd.equals(确定)TextBox tb=(TextBox)s;(内容为+tb.getString();(长度为+tb.size();,6.7 Alert组件,一个Alert是一个显示文本和图像的普通的screen。它通知用户出错及另外一些异常信息。一个Alert可以是模式的,也可以是定时的。一个模式的Alert在用户取消它之前一直停留在屏幕上,之后,它可能回到显示它之前的屏幕状态,或者转到一个由应用程序特别选择的屏幕。当程序要求用户作出选择时,这是很有用的。如,程序可能显示信息如Are you sure?并给出选项Yes和No。一个定时的Alert将被持续显示指定(一般为几秒钟)的时间。在显示一条用户可能还不了解的信息时,这是很有用的。例如,当发送信息成功后显示的成功发送短信息的提示。注意:MIDP实现会自动提供一种方法以取消一个模式的Alert。如,在Sun的实现中,它提供了一个映射到软按钮的Done命令。,表66 Alert对象的主要方法,程序614:AlertTest.javaimport;import;import;import;import;public class AlertTest extends MIDlet private Display display;public AlertTest()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);Alert al=new Alert(测试);al.setType(AlertType.ALARM);int dt=al.getDefaultTimeout();(默认显示时间:+dt);/al.setTimeout(Alert.FOREVER);al.setTimeout(10000);al.setString(这是一个Alert窗口);display.setCurrent(al);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,程序615:ImageAlert.javaimport.*;import;import;public class ImageAlert extends MIDlet private Display display;public ImageAlert()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);Alert al=new Alert(图像Alert测试);al.setType(AlertType.INFO);al.setTimeout(Alert.FOREVER);try Image img=Image.createImage(/redball.png);al.setImage(img);catch(Exception e)System.out.println(e.toString();al.setString(这是一个图像Alert窗口);display.setCurrent(al);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,程序616:commandAlert1.javaimport.*;import;import;public class commandAlert1 extends MIDlet private Display display;public commandAlert1()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);Alert al=new Alert(带有Command的Alert);al.setType(AlertType.INFO);al.setTimeout(10000);Command ok=new Command(确定,Command.OK,1);al.addCommand(ok);display.setCurrent(al);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,6.8 Form类,Form类和前面提到的A1ert、List、TextBox类一样,都是Screen类的直接子类,但Form是特殊的屏幕对象。它本身不提供能够与用户直接交互的用户界面,而是作为一个容器,容纳其它的可视组件,这些组件被称作表单元素,都是Item类的子类。Item类是表单元素对象通用属性或方法的一个集合。Form类提供了一个方法对表单元素进行编辑,如添加、删除等,或者获取表单元素的引用,从而直接对它的内容操作。,表67 Form类的主要方法,MIDP实现负责整个Form的布局和元素切换以及滚动,包含在表单中的任何组件都没有滚动机制,而是跟整个内容一起滚动。Form表单可以包含以下类型的Item组件:StringItem、ImageItem、Spacer、DateField、Gauge、CustomItem、TextField和ChoiceGroup。另外MIDP还支持开发自定义组件。这些组件集中在Form中,来提供复杂的用户交互界面。,6.8.1 StringItemStringItem的作用就是在屏幕上显示一串文字信息,并配合不同的外观类型。StringItem有两个构造函数,如下所示:StringItem(String label,String text)StringItem(String label,Stringtext,int appearanceMode),程序619:StringItemTest.javaimport.*;import javax.microedition.midlet.MIDlet;import;public class StringItemTest extends MIDlet private Display display;public StringItemTest()super();protected void startApp()throws MIDletStateChangeException display=Display.getDisplay(this);Form f=new Form(StringItem测试);StringItem si1=new StringItem(测试1:,普通外观的文本,Item.PLAIN);StringItem si2=new StringItem(测试2:,按钮外观的文本,Item.BUTTON);StringItem si3=new StringItem(测试3:,超链接外观的文本,Item.HYPERLINK);int l1=f.append(si1);int l2=f.append(si2);int l3=f.append(si3);System.out.println(第一个字符串对象的索引为:+l1);System.out.println(第二个字符串对象的索引为:+l2);System.out.println(第三个字符串对象的索引为:+l3);display.setCurrent(f);protected void pauseApp()protected void destroyApp(boolean arg0)throws MIDletStateChangeException,6.8.2 Item组件的命令处理机制,Item虽然并不是继承Displayable,但是它仍旧可以像Displayable的子类如List、Alert一样来通过addCommand()/removeCommand来添加或删除命令选项。对于任意的Item组件对象,它必须有以下元素:1个Command数组,它包含关联到此Item对象上的所有Command命令,可以通过addCommand()/removeCommand来添加或删除Command选项。1个defaultCommand变量,它指向Command数组中的一个Command。可以通过setDefaultCommand()方法来设置defaultCommand变量的值。如果调用setDefaultCommand(null),则设置defaultCommand变量的值为null。1个ItemCommandListener的引用,代表注册到此Item对象的命令监听器。,程序621:StringItemCommandTest.javaimport.*;import javax.microedition.midlet.MIDlet;import;public class StringItemCommandTest extends MIDlet implementsItemCommandListener private Display display;public StringItemCommandTest()super();protected void startApp()throws MIDletStateChangeExce

    注意事项

    本文(MIDP高级界面编程 (2).ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开