J2ME三种低级用户界面事件处理技术比较

2016-02-19 13:43 13 1 收藏

想要天天向上,就要懂得享受学习。图老师为大家推荐J2ME三种低级用户界面事件处理技术比较,精彩的内容需要你们用心的阅读。还在等什么快点来看看吧!

【 tulaoshi.com - 编程语言 】

在J2ME的低级用户界面编程中,进行事件处理是经常使用到的技术之一,因为处理手机键盘上的按键事件是最常使用到的一种,所以就以此为中心,介绍一下实际使用过程中三种处理方式进行说明:
  
  1、 覆盖keyPressed方法
  
   !-- frame contents -- !-- /frame contents --   在继续了Canvas的界面中,假如需要进行按键的处理,我们只需要在该类中覆盖Canvas类里面的这个方法,当手机按键被按下时,系统会自动调用该方法,并把被按下的按键的键值(keyCode)作为参数传递进来。所以假如需要处理按键事件,只需要在该方法内部检测按下的按键的键值就可以了。
  
  在手机键盘上,可以简单的分为功能键区域和数字键区域,功能键指手机上的左右软键,中间的导航键以及接听电话和挂机键等,数字键区域指手机键盘上的0-9数字键以及*号和#号键。其中功能键的个数以及键值,不同的手机区别很大,而数字键的区域的按键个数,以及按键的键值都是一样的。
   
  检测键值有如下两种方法:
  
  a) 直接使用keyCode值
  
  直接使用keyCode值的代码有如下两种,分别是:
  
  if(keyCode == 52){
   //处理代码
  }
  或者:
  
  if(keyCode == Canvas.KEY_NUM4){
   //处理代码
  }
  以上是使用按键处理中的两种代码书写风格,建议实际使用过程中使用第二种,这样代码轻易阅读。 而在实际的游戏开发过程,除了一些非凡的功能键,例如手机上的左右软键,很少使用这种方式进行编写,而是采用下面的方式进行处理。
  
  b) 使用gameAction(游戏动作)
  
  gameAction是一种将手机键盘映射成为游戏动作的机制,通过这种机制,可以使不同手机上的按键都能转换为类似或者是相同的游戏动作,当然这个工作是由每个手机厂商实现的。
  
  实际使用中的代码如下:
  
  //将keyCode转换为游戏动作
  int action = getGameAction(keyCode);
  其中,keyCode和游戏动作的对应关系如下:
  
  Canvas.UP——数字键2和向上导航键
   
  Canvas.DOWN——数字键8和向下导航键
  
  Canvas.LEFT——数字键4和向左导航键
  
  Canvas.RIGHT——数字键6和向右导航键
  
  Canvas.FIRE——数字键5和确定导航键
  
  Game_A、Game_B、Game_C、Game_D分别对应键盘上的1、3、7、9或者是7、9、*、#键。
  
  转换成游戏动作以后的事件处理代码如下:
  
  switch(action){
  case Canvas.LEFT://向左
   //处理代码
   break;
  case Canvas RIGHT://向右
   break;
  case Canvas.UP://向上
   break;
   ……
  }
  这个就是MIDP1.0中最常使用的按键处理方式。但是无论这种方式如何的优越,它还是无法摆脱keyPressed方法的束缚。
  
  这样就将游戏编程中的三种逻辑:延迟、响应用户操作、重新绘制,隔离了开来,分别在用户线程和系统线程中进行。
  
  为了解决这个不足,MIDP2.0在GameCanvas内部引入了一种新的事件处理方式按键状态(keyStates)机制。
  
  2、 使用keyStates
  
  按键状态指系统通过一个变量来记录手机键盘上每个和游戏动作有关的按键,假如该键按下则设置对应的位(bit)为1,否则为0,然后可以通过位运算获得哪个按键被按下。
  
  注重:按键状态只能在MIDP2.0的GameCanvas子类中里面使用,而且只能处理和游戏相关的按键。假如支持该处理方式处理游戏按键的话,将在keyPressed方法中无法接收到和游戏相关的按键,其他按键还可以正常接收响应。
  
  假如要使用该功能,首先要在GameCanvas子类的构造方法中,让该界面支持该操作,这个步骤可以使用GameCanvas的构造方法来实现,代码如下:
  
  //使该界面支持按键状态处理
  super(true);
  这样该界面就可以进行按键状态处理。和前面的按键处理不同,该种处理方式可以脱离keyPressed方法的限制,也就是说可以写在任意的处理方法内部,只需要在线程中调用即可。
  
  使用该处理方式,无论线程中的延迟多么长,系统都可以保持该按键的状态。这个好处是其他处理方式无法做到的。
  
  首先,获得游戏按键状态,代码如下:
  
  //获得游戏的按键状态
  int states = getKeyStates();
  该代码的作用是获得当前按键状态,并把按键状态清空!具体的处理代码如下:
  
  

来源:http://www.tulaoshi.com/n/20160219/1605035.html

延伸阅读
J2ME就是Java 2 Platform,micro Edition的缩写。J2ME是Java 2的一个组成部分,与J2SE、J2EE并称。根据Sun Microsystems,Inc.的定义:J2ME是一种高度优化的Java运行环境,针对市面上的大量消费类电子设备,例如Papers、cellular phones(蜂窝电话), screen-phones(可视电话?)、digital set-top boxes(数字机顶盒)、car navigation systems(汽车...
1、XML(Extensible Markup Language)可扩展标记语言——XML独立于硬件和软件,XML文件和Html文件一样,实际上是一个文本文件。创建XML文件最普通的工具和HTML一样,就是“记事本”了。除了“记事本”之外,当然还有一些更加方便的工具,如XML Notepad、XML Pro、CLIP、XML SPY等,这些工具的一大特点是:能够检查你所建立的XML文件是否符合XML规...
Java 2 Micro Edition (J2ME)是建立在一个由profiles,配置,虚拟机和主持操作系统等部分所组成的标准架构之上的。这些内容组成了完整的J2ME实时运行环境。图A显示了这些部分是如何结合在一起的。J2ME提供了两种配置:Connected Limited Device Configuration (CLDC)和the Connected Device Configuration (CDC)。这两种配置以设备的内存fo...
假如您曾经到http://www.Javasoft.com 网站上查询有关Java 2 Micro Edition 的资料,十之八九会被一大堆的技术名词搞的一头雾水。什么 KVM ,什么CLDC 、CDC 、MIDP ,后面还冒出了Personal Java 、Embedded Java以及JES 等名词。虽然名为Java 的微小版本,可是它的世界可真是不小,让我们满肚子「见山不是山,见水不是水」的迷惑。的确,在我刚...
Ticker对象 Ticker对象是一个项目类型的对象,它的作用相当于一个滚动消息栏,在屏幕的上方显示滚动的信息。 Ticker类的构造函数仅有一个参数,那就是需要滚动显示的消息。 package fancy.test; import Javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class ShowTicker extend...

经验教程

283

收藏

70
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部