欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第5章-低级用户界面编程.ppt

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

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

    第5章-低级用户界面编程.ppt

    v第5章 低级用户界面编程v高级用户界面API使用起来比较简单,且具有较高的可移植性,但由于是通过底层的MIDP实现来控制最终的UI显示,因此无法实现对屏幕UI组件外观的精确控制。v在一些手机游戏等程序的实现中,要求开发人员必须对屏幕画面的每一个细节都要进行精确控制,这就需要用到低级用户界面API来进行界面开发。v利用低级用户界面API,开发者可以对界面进行更精确的控制,但在获得更大的灵活性的同时也失去了可移植性。v CanvasCanvas简介简介5.1低级事件的处理低级事件的处理5.2 Graphics Graphics 开发简介开发简介5.3 MIDP Timer APIMIDP Timer API5.45.1 Canvas简介v正如高级界面屏幕类都继承Screen类一样,我们要用到低级用户界面必须要继承Canvas这个抽象类,Canvas是Displayable的直接子类,属于J2ME中的低级API。v用户利用这些低级API可对设备精确控制,如绘制像素、接收原始的用户输入事件等。v与高级API相比控制更加灵活,但这是以其复杂性、高成本为代价的,并牺牲了一定的可移植性。它的基本用法与其他Displayable对象一致。v低级用户界面编程必须使用两个关键类:Canvas类和Graphics类。vCanvas是个抽象类,代表要绘制的抽象屏幕。为使用低层API建立用户界面,应用程序必须建立Canvas的一个子类,并实现paint()方法。vGraphics类的实例是作为参数传递给paint()的,它提供了设备绘图能力的入口,它允许在像素层面直接与显示设备交互操作。任何时候系统需要绘制屏幕时,都将调用Canvas类的paint()方法。v低级用户界面编程的核心任务在于在Canvas类的paint()方法中如何利用Graphics对象进行绘图操作。vCanvas的核心是paint()这个方法,这个方法做是负责绘制屏幕上的画面,应用程序必须实现这个抽象方法。在paint()方法中有一个参数是Graphics对象,可以利用Graphics类提供的各种方法进行绘图。v因此继承Canvas类的程序结构如下:vclassMyCanvasextendsCanvasvvprotectedvoidpaint(Graphicsg)vvvv任何时候都可以通过调用repaint()方法来产生重绘事件,它有两个方法,一共需要四个参数,分别用来指示起始坐标(X,Y)和长宽,另一个则不需要任何参数,代表整个画面重新绘制。vpublicfinalvoidrepaint(intx,inty,intwidth,intheight)v在低级UI里,我们可以直接把Graphics渲染到屏幕上,也可以在屏幕外把Graphics合成到一个Image中。v已渲染的图形具体是合成Image还是显示到屏幕上,要由这个Graphics具体的来源而定,而渲染到屏幕上的Graphics对象将被送到paint()方法中来进行调度,这也是图形显示在屏幕上的唯一的途径。v只有在paint()方法的执行期间这个应用程序才可以对Graphics进行操作,至于要渲染到Image中的Graphics对象,当需要调用它的时候,可以通过Image.getGraphics()方法来取得相应的Graphics,它将可以被应用程序一直占有。v我们可以通过下面的两种方法获取Canvas对象的大小:vpublicintgetHeight();/获取可显示区域的高度(以像素为单位)vpublicintgetWidth();/获取可显示区域的宽度(以像素为单位)vimportjavax.microedition.lcdui.Display;vimportjavax.microedition.midlet.MIDlet;vimportjavax.microedition.midlet.MIDletStateChangeException;vpublicclassCanvasTestextendsMIDletvprivateDisplaydisplay;vMyCanvasmc;vpublicCanvasTest()vvprotectedvoidstartApp()throwsMIDletStateChangeExceptionvdisplay=Display.getDisplay(this);vmc=newMyCanvas();vdisplay.setCurrent(mc);vvprotectedvoidpauseApp()vvprotectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeExceptionvvpublicclassMyCanvasextendsCanvasvprotectedvoidpaint(Graphicsg)vg.setColor(255,255,255);vg.fillRect(0,0,getWidth(),getHeight();vg.setColor(0,0,255);vg.drawString(“thisisacanvas,10,10,Graphics.TOP|Graphics.LEFT);vvv5.2低级事件的处理v尽管通过Graphics对象可以实现绘制复杂的用户交互界面,但是,还必须存在一种底层机制来支持UI界面和用户之间的交互。Canvas为程序开发人员提供底层事件处理支持。底层事件大致可分为三类:PressEvents(按键事件)、ActionKeys(动作按键)和PointerEvents(触控事件)。但设备具体支持那些系统事件,必须由硬件的支持程度来判断。Canvas提供了一系列的方法供侦测硬件的支持程度。事件名称侦测法回调函数键盘事件一定支持keyPressed(int keyCode)keyReleased(int keycode)键盘连发Canvas.hasRepeatedEvent()无屏幕事件一定支持showNotify()重绘事件一定支持Paint(Graphics g)是否支持双缓存Canvas.isDoubleBuffered()是否支持触控Canvas.hasPointerEvents()是否支持触控屏幕拖拽Canvas.hasPointerMotionEvents()5.2.1 按键事件v使用Canvas类的一个好处是可以获得键盘输入的按键代码,按键事件的几个核心方法是。vkeyPressed()、keyReleased()、keyRepeated(),当按键按下时会触发keyPressed(),当松开按键时,会触发keyReleased(),当长时间按住按键时会触发keyRepeated(),但是RepeatEvents不是JTWI要求强制支持的,所以程序开发人员使用之前一定要调用hasRepeatEvents()方法来进行测试,看设备是否支持。v在Canvas里面每按下一个按键都会触发keyPressed()方法,并传入相应位置的整数值,我们在MIDP规范中可以很容易发现,KEY_NUM0KEY_NUM9十个常数分别代表键盘上的09。v还有两个功能键,KEY_STAR,KEY_POUND,如果我们传入的值小于0,代表我们传入了不合法的keyCode,某些设备上还支持连续按键响应,但这并不是JTWI规定要支持的,所以我们在进行实际开发之前一定要用前面讲到的hasRepeatEvents()方法来进行判定。按按键按按键代代码按按键代代码的的数数值0KEY_NUM0481KEY_NUM1492KEY_NUM2503KEY_NUM3514KEY_NUM4525KEY_NUM5536KEY_NUM6547KEY_NUM7558KEY_NUM8569KEY_NUM957*KEY_STAR42#KEY_POUND35v一般来说在继承Canvas的类中只要重载这三个方法就可以了。当按键被按下的时候,按键的代码会自动的传给这三个方法。5.2.2 游戏动作处理vgameAction是一种将手机键盘映射成为游戏动作的机制,通过这种机制,可以使不同手机上的按键都能转换为类似或者是相同的游戏动作,这样更方便用户对于游戏的操纵。游戏程序的开发人员根据游戏动作来设计游戏也大大提高游戏的可移植性。至于具体哪个键对应哪个游戏动作是由不同的MIDP实现来完成这一映射的,不同的手机厂商和设备可能具有不同的MIDP实现。v可以在程序中通过以下代码来获取特定的游戏动作对应的按键:intaction=getGameAction(keyCode);其中,MIDP中定义的游戏动作有:Canvas.UP、Canvas.DOWN、Canvas.LEFT、Canvas.RIGHT、Canvas.FIRE、Game_A、Game_B、Game_C、Game_D。v但这些按键需要通过getGameAction方法进行处理键盘代码。当按下这些按键时会映射到我们为每个按键事件编写的方法,来完成一些动作。v程序:GameActionCanvas.javavimportjavax.microedition.lcdui.Canvas;vimportjavax.microedition.lcdui.Graphics;vimportjavax.microedition.lcdui.Ticker;vpublicclassGameActionCanvasextendsCanvasvStringpromote=;vintcx,cy;vpublicGameActionCanvas()vsuper();vcx=getWidth()/2;vcy=getHeight()/2;vvpublicvoidpaint(Graphicsg)vvg.setColor(255,255,255);vg.fillRect(0,0,getWidth(),getHeight();vg.setColor(0,0,0);vg.fillArc(cx,cy,30,30,0,360);vg.drawString(promote,10,this.getHeight()-20,Graphics.TOP|Graphics.LEFT);vvvprotectedvoidkeyPressed(intkeycode)vif(keycode=getKeyCode(Canvas.UP)vif(cy20)cy-=20;vvif(keycode=getKeyCode(Canvas.DOWN)vif(cy20)cx-=20;vvif(keycode=getKeyCode(Canvas.RIGHT)vif(cxthis.getWidth()-20)cx+=20;vvpromote=getKeyValue(keycode);vrepaint();vvprotectedvoidkeyReleased(intkeycode)vvvpublicStringgetKeyValue(intkeycode)vStringnKey=非数字键;vStringAction=未知游戏动作;vif(keycode=Canvas.KEY_NUM0)nKey=数字键0;vif(keycode=Canvas.KEY_NUM1)nKey=数字键1;vif(keycode=Canvas.KEY_NUM2)nKey=数字键2;vif(keycode=Canvas.KEY_NUM3)nKey=数字键3;vif(keycode=Canvas.KEY_NUM4)nKey=数字键4;vif(keycode=Canvas.KEY_NUM5)nKey=数字键5;vif(keycode=Canvas.KEY_NUM6)nKey=数字键6;vif(keycode=Canvas.KEY_NUM7)nKey=数字键7;vif(keycode=Canvas.KEY_NUM8)nKey=数字键8;vif(keycode=Canvas.KEY_NUM9)nKey=数字键9;vif(keycode=Canvas.KEY_STAR)nKey=键*;vif(keycode=Canvas.KEY_POUND)nKey=键#;vvinttemp=getGameAction(keycode);vswitch(getGameAction(keycode)vcaseCanvas.UP:vAction=游戏动作向上;break;vcaseCanvas.DOWN:vAction=游戏动作向下;break;vcaseCanvas.LEFT:vAction=游戏动作向左;break;vcaseCanvas.RIGHT:vAction=游戏动作向右;break;vcaseCanvas.FIRE:vAction=游戏动作执行;break;vcaseCanvas.GAME_A:vAction=游戏动作A;break;vcaseCanvas.GAME_B:vv图图 游戏动作的处理游戏动作的处理 5.2.3 5.2.3 触控事件v触控事件主要面向具备触控屏幕的高端设备,并非JTWI要求强制支持的,触控事件处理的核心方法为:pointerPressed()、pointerReleased()和pointerDragged(),分别对应程序开发人员通常所用的移动设备手写笔的按下和松开、拖曳三个动作,程序开发人员在这三个方法里可以定义相应的事件处理函数。(1)pointerPressed(intx,inty)(2)pointerReleased(intx,inty)(3)pointerDragged(intx,inty)当然,并不是所有的设备都支持指针设备,可以采用一些方法判断设备是否支持指针设备。(1)hasPointerEvents()(2)hasPointerMotionEvents()vimportjavax.microedition.lcdui.Canvas;vimportjavax.microedition.lcdui.Graphics;vpublicclassPointerEventCanvasextendsCanvasvintstart_x=0;vintstart_y=0;vintend_x=0;vintend_y=0;vprotectedvoidpaint(Graphicsg)vg.setColor(0 xffffff);vg.fillRect(0,0,getWidth(),getHeight();vg.setColor(0 xff0000);vg.drawLine(start_x,start_y,end_x,end_y);vvvprotectedvoidpointerPressed(intx,inty)vstart_x=x;vstart_y=y;vrepaint();vSystem.out.println(x);vSystem.out.println(y);vvprotectedvoidpointerReleased(intx,inty)vend_y=y;vend_x=x;vvprotectedvoidpointerDragged(intx,inty)vend_x=x;vend_y=y;vrepaint();vv5.3 屏幕事件处理v屏幕显示与隐藏事件低级屏幕显示或隐藏时,将自动触发屏幕显示或隐藏事件,并调用相应的回调方法。在Canvas对象显示在屏幕上之前,MIDP实现会首先调用shownotify()方法。Canvas类中这个方法的默认实现是空的,即不作任何处理。Canvas的子类可以重载这个方法,用来在它被显示之前执行一些任务,比如设置动画、启动计时器等。在Canvas对象被从显示屏上删除之后,MIDP实现会立即调用hideNotify()方法,这个方法的默认实现也是空的,Canvas的子类可以重载这个方法,用来执行一些Canvas对象删除后的工作,比如终止动画、销毁计时器等。对于某些突发事件,比如说来电等等,屏幕会被系统画面所覆盖的时候,就会调用hideNotify()方法,当恢复原状时,就会调用程序开发人员原本的画面,那么系统就会同时调用showNotify()这个方法。vimportjavax.microedition.lcdui.*;vimportjavax.microedition.midlet.*;vpublicclassAlertandCanvasTestextendsMIDletimplementsCommandListenervprivateDisplaydisplay;vprivateCanvascanvas;vprivateAlertalert;vpublicAlertandCanvasTest()vsuper();vvprotectedvoidstartApp()throwsMIDletStateChangeExceptionvdisplay=Display.getDisplay(this);vcanvas=newMyCanvas2();valert=newAlert(暂停.,稍候回来,广告也精彩!,null,AlertType.INFO);valert.setTimeout(3000);vvcanvas.addCommand(newCommand(暂停,Command.SCREEN,1);vcanvas.setCommandListener(this);vdisplay.setCurrent(canvas);vvprotectedvoidpauseApp()vvprotectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeExceptionvvpublicvoidcommandAction(Commandc,Displayabled)vif(c.getLabel().equals(暂停)vdisplay.setCurrent(alert,display.getCurrent();vvvvclassMyCanvas2extendsCanvasvprotectedvoidpaint(Graphicsarg0)vSystem.out.println(paint()方法被调用.);vSystem.out.println(isShown()+isShown();varg0.setColor(255,255,255);varg0.fillRect(0,0,getWidth(),getHeight();varg0.setColor(0,0,255);varg0.drawString(程序运行中.,10,10,Graphics.TOP|Graphics.LEFT);vvprotectedvoidshowNotify()vSystem.out.println(showNotify()方法被调用.);vSystem.out.println(isShown()+isShown();vvprotectedvoidhideNotify()vSystem.out.println(hideNotify()方法被调用.);vSystem.out.println(isShown()+isShown();vvv5.4 Graphics 开发简介v前面的章节里我们学习了Canavs类,它提供了一个绘图接口方法paint(Graphicsg),具体的绘图由参数g来实现。v由此可以看出Canvas类和Graphics类的关系就是画布和画笔的关系。我们使用Graphics类可以在屏幕上绘制图片、线条、文字等多种低级别的界面来。我们编写的游戏程序也都要用到Graphics类。5.4.1 坐标概念v在MIDP程序设计中用到的坐标系和平时用到的坐标系不一样,如图5-4所示。图图5-4 5-4 坐标坐标vGraphics类绘画手机中的原点并不是位于屏幕的最上端的,由于手机屏幕包括了多个区域,如标题区域、内容区域和按钮区域等。实际原点位于内容区域的左上角。v下面我们来讲一讲Graphics这个对象,我们可以把它当作一个白纸,只要调用这个方法,我们就可以运用自己的想象力在这张白纸上画出自己想要的图案。5.4.2 5.4.2 绘制基本图形vGraphics类提供的大量的绘图操作,这里给出了相关操作的方法供参考。v绘制直线:vvoiddrawLine(intx1,inty1,intx2,inty2)v绘制弧线:vvoiddrawArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)v绘制图片:vvoiddrawImage(Imageimg,intx,inty,intanchor)v绘制矩形:vvoiddrawRect(intx,inty,intwidth,intheight)v绘制圆角矩形:vvoiddrawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)v绘制字符串:vvoiddrawString(Stringstr,intx,inty,intanchor)v绘制填充矩形:vvoidfillRect(intx,inty,intwidth,intheight)图图5-5 5-5 绘制的直线、矩形和填充矩形绘制的直线、矩形和填充矩形 5.4.3 颜色操作vGraphics类提供了3个设置颜色的方法。(1)publicvoidsetColor(intred,intgreen,intblue)(2)publicvoidsetColor(intRGB)(3)publicvoidsetColor(intvalue)v需要大家注意的是,red、green和blue的值只能在0255之间,不可以超出这个范围。5.4.4 5.4.4 锚点(anchor anchor pointspoints)v通过锚点(anchorpoints)来控制它们具体的方位,锚点的作用就是设置占用屏幕矩形方块的具体位置。有如下几个锚点常量。(1)staticintTOP:将Text对象和Image对象的锚点定位于对象顶部的常数。(2)staticintBASELINE:将Text对象的锚点定位于对象基准线的常数。(3)staticintBOTTOM:将Text对象和Image对象的锚点定位于对象底部的常数。(4)staticintLEFT:将Text对象和Image对象的锚点定位于对象左边的常数。(5)staticintHCENTER:将Text对象和Image对象的锚点定位于对象水平居中的常数。(6)staticintVCENTER:将Image对象的锚点定位于对象垂直居中的常数。(7)staticintRIGHT:将Text对象和Image对象的锚点定位于对象右边的常数。v对于Image对象,并不存在BASELINE。对于文字,没有VCENTER。其具体位置对应如图5-7所示。图图5-7 5-7 锚点位置锚点位置 5.4.5 Image 类vImage分为可变和不可变两种类型,不可变的Image是从资源文件,二进制数据,及其他Image直接创建的,一旦创建完成,Image就无法再变化。v不可变图像可以通过下列三种方法创建:vImage.createImage(Imagesource)vImage.createImage(Stringname)vImage.createImage(btyeimageData,intimageOffset,intimageLenght)v通过Image.createImage(Stringname)方法从指定的路径中读取创建Image所必需的数据,注意参数中的字符串必须以“/”开头,并且包括完整的名称。v可变的Image以指定的大小创建,它是可以修改的,可变的Image由Image.createImage(intwidth,intheight)方法来创建,需要指定长宽,Image的其他显示特性和机器的显示屏完全一致。v对于不变图像,可以调用Graphics类的drawImage()方法进行绘制。对于可变图像,Graphics提供了获取图像对象的getGraphics()方法。vGraphicsg=imagegetGraphics()vimportjavax.microedition.lcdui.*;vpublicclassImageCanvasextendsCanvasvImageimg=null;vpublicvoidpaint(Graphicsg)tryvimg=Image.createImage(/butterfly.png);vg.drawImage(img,0,0,Graphics.LEFT|Graphics.TOP);vcatch(Exceptione)ve.printStackTrace();vvvvimportjavax.microedition.lcdui.*;vimportjavax.microedition.midlet.*;vimportjava.io.*;vpublicclassImageCanvasextendsCanvasvvprivateImagebuffer;/可变图像,作为绘制缓冲vprivateImageimage;/不变图像,用来加载图片文件vpublicImageCanvas()vvtryvvimage=Image.createImage(/tree.png);/加载图片文件vcatch(java.io.IOExceptione)vvSystem.out.println(e.getMessage();/处理I/O异常vvbuffer=Image.createImage(getWidth(),getHeight();v/用一个可变图像作为绘制缓冲vGraphicsbg=buffer.getGraphics();/获取缓冲的Graphics对象vbg.setColor(0 xFFFFFF);vbg.fillRect(0,0,getWidth(),getHeight();/填充整个屏幕vbg.drawImage(image,getWidth()/2,getHeight()/2,Graphics.VCENTER|Graphics.HCENTER);vvpublicvoidpaint(Graphicsg)vvg.drawImage(buffer,0,0,g.TOP|g.LEFT);/将缓冲区上的内容绘制到屏幕上vv 5.4.6 5.4.6 字体类vGraphics中还提供了对了对字体的控制方法,每个Graphics都有一个Font对象与其关联,来进行文字的渲染操作,调用其类方法setFont(null),即可使字体恢复到默认状态,对于具体的参数,Font提供了以下常量,来控制Font的属性。v字体大小:SMALL、MEDIUM、LARGE。v字体外观:PROPORTIONAL、MONOSPACE、SYSTEM。v字体风格:PLAIN、BOLD、ITALIC、UNDERLINED。vstaticFontgetFont(intface,intStyle,intsize):获得一个对象以表示字体所具有指定的外观,样式和大小。vstaticFontgetDefaultFont():获取系统的默认字体。v其中:vface参数,用来定义字体的外观,Font类定义的外观的常数如下。(1)staticintFACE_MONOSPACE:“定宽”字体外观,数值32被指定给此常。(2)staticintFACE_PROPORTIONAL:“比例”字体外观,数值64被指定给此数。(3)staticintFACE_SYSTEM:“系统”字体外观,数值0被指定给次参数。vStyle参数,用来定义字体的样式。Font类定义的样式参数。(1)staticintSTYLE_PLAIN:样式常数“常规”,数值0被指定给此常数。(2)staticintSTYLE_BOLD:样式常数“加粗”,数值1被指定给此常数。(3)staticintSTYLE_ITALIC:样式常数“倾斜”,数值2被指定给此常数。(4)staticintSTYLE_UNDERLINED:样式常数“加下划线”,数值4被指定给此常数。vsize参数,定义字体大小。Font类定义的字号大小常数。(1)staticintSIZE_LARGE:系统依赖性的“大”字号。(2)staticintSIZE_MEDIUM:系统依赖性的“中”字号。(3)staticintSIZE_SMALL:系统依赖性的“小”字号。5.4.7 调整原点坐标vGraphics类提供了一个可以调整屏幕坐标原点位置的方法:vvoidtranslate(intx,inty)在当前坐标系统中把相关图形的左上角坐标位置改变为(x,y)点。v每次调用translate方法都是针对当前的坐标系统原点进行调整的,并不是以屏幕左上角调整的。v比如:当前坐标为(0,0),如果调用了translate(2,4)则当前原点坐标是原来屏幕的(2,4)坐标,如果再调用translate(3,4)则坐标(3,4)是相对于(2,3)的,所以相当于原始坐标系中的(5,7)。v获取重新定位的原点的方法:vintgetTranslateX():获取左上角的横坐标。vintgetTranslateY():获取左上角的纵坐标。v转换原点位置的最佳场合是当一张图片的大小比屏幕大时,以Screen为基础的图片显示,系统会自动提供上下卷动的功能,但是以Canvas为基础的图片显示时,系统并未提供卷动的功能,因此应如何卷动需要用户进行设计。图图5-8 5-8 调整原点坐标调整原点坐标5.5 MIDP Timer APIvMIDP中有这样一个API,它是一个可以简单地实现多任务调度执行的定时器类,调度由一个后台线程完成。使得J2ME开发人员从中受益。vJ2ME提示了两个类用来定义和调试任务,他们分别是TimerTask和Timer。TimerTask是用户定义的需要被调度的所有任务的抽象基类。vTimer类在任务执行的时候负责创建和管理执行线程。要定义一个任务,定义一个TimerTask的子类,并实现run方法。v例如:vpublicclassMyTaskextendsTimerTaskvvpublicvoidrun()vvvSystem.out.println(Runningthetask);vvvschedule()共有四个重载方法;每一个任务都可以在一个特定的时间点(使用一个Date对象指定)或者延时特定的时间段(以毫秒为单位)之后执行。vTimertimer=newTimer()vSchedule(TimerTasktask,longdelay)vSchedule(TimerTasktask,Datetime)vSchedule(TimerTasktask,longdelay,longperiod)vSchedule(TimerTasktask,DatefirstTime,longperiod)v你可以安排这个任务只执行一次或者在一个特定的时间段里反复执行。Timer还提供了一个scheduleAtFixedRate方法来根据该任务第一次执行的时间来指定反复执行时延长的时间段。v如果一个任务被延时了,被安排在后面执行的任务就被相应地缩短等待时间以“接上”被延时的任务。每个Timer对象都会创建和管理一个后台线程。v一般情况下,一个程序创建一个Timer就够了,当然也可以根据需要创建任意多个。通过调用cancel方法,你还可以在任何时候停止一个Timer并终止后台线程。v但要注意的是,一旦Timer被终止了,就不可能再恢复执行,除非你重新生成一个Timer对象并重新安排你想要执行的任务。vTimer对象是线程安全的,你可以在多线程的环境下直接访问Timer对象,而不用任何显式的同步处理。另外,每个任务提供了一个cancel方法(继承自TimerTask基类),你可以在任务执行的过程当中调用该方法来终止该任务。v一旦你终止了该任务,那么它将退出任务调度。你可以在任何时间调用任务的cancel方法来终止该任务的执行,哪怕该任务还一次都没有执行过。5.7小结v本章重点讲解了MIDP低级API方法在屏幕上绘制图片、字体和自定义控件及事件处理,程序员对这些低级API方法有高度的自主开发权,所以可以制作出丰富多彩的界面来,但这需要花费大量的开发时间。

    注意事项

    本文(第5章-低级用户界面编程.ppt)为本站会员(s****8)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开