首页 > 技术文章 > 嵌入式开发 > J2ME > 分析MIDP低级事件处理机制

分析MIDP低级事件处理机制

52RD.com 2005年12月22日 mingjava            评论:1条 查看 我来说两句
MIDP高级事件处理机制中我们讲述了如何实现CommandListener和ItemStateListener接口来完成高级事件处理。但是来自于键盘输入的低级事件是不能由Command来完成的。你必须继承Canvas类并覆盖其中的方法来完成低级事件的处理。

    通常低级事件的处理是为了满足游戏开发的需要,因为游戏开发相关的问题非常复杂。因此不在这里进行阐述,有兴趣的朋友可以和我索要相关的游戏开发资料。MIDP定义了如下键值在Canvas类内

  • KEY_NUM0
  • KEY_NUM1
  • KEY_NUM2
  • KEY_NUM3
  • KEY_NUM4
  • KEY_NUM5
  • KEY_NUM6
  • KEY_NUM7
  • KEY_NUM8
  • KEY_NUM9
  • KEY_STAR
  • KEY_POUND

    这些都是按键基本值,为了提高程序的可移植性你应该经可能的使用标准键值,当然有些手机是触摸屏的。事件的传递是通过如下方法来实现的。

  • protected void keyPressed(int keyCode)
  • protected void keyReleased(int keyCode)
  • protected void keyRepeated(int keyCode)
  • protected void pointerPressed(int x, int y)
  • protected void pointerDragged(int x, int y)
  • protected void pointerReleased(int x, int y)
  • protected void showNotify()
  • protected void hideNotify()
  • protected abstract void paint(Graphics g)
  • commandAction() method of the CommandListener interface

        开发者应该继承Canvas类的同时覆盖相应的方法来实现低级事件的处理,低级事件的处理是连续的、串行的,在前面的事件返回之前后面的事件不会执行,当然也有例外,你可以参考API doc得到答案。针对上面的几个方法我简单介绍一下,前三个函数是针对按键事件处理的,获得用户的按键值后进行相关的事件处理,有一点需要注意,并不是所有的设备都支持keyRepeat特性,因此在使用之前你应该通过hasRepeatEvents()函数来判断,接下来的三个函数是针对触摸屏式的设备的,它以屏幕上的点的位置位参数,注意在使用他们以前应该判断设备是不是支持这个特性,使用hasPointerEvents()判断,后面的两个函数是屏幕被显示和被隐藏的时候触发的。paint()和commandAction()大家肯定都很熟悉了,paint()在Canvas被初始化或者调用repaint()的时候执行。
        下面是一个例子,它的功能就是在屏幕上显示出你按下键的键值,界面非常简单因此没有抓图。代码如下所示:

    import javax.microedition.lcdui.Display;
    import javax.microedition.midlet.MIDlet;
    import javax.microedition.midlet.MIDletStateChangeException;
    public class LowLevelMIDlet extends MIDlet
    {

  •  private Display display;
        private KeyCanvas keyCanvas;

        protected void startApp() throws MIDletStateChangeException
        {
            display = Display.getDisplay(this);
            keyCanvas = new KeyCanvas();
            display.setCurrent(keyCanvas);

        }

        protected void pauseApp()
        {
        }

        protected void destroyApp(boolean arg0) throws MIDletStateChangeException
        {
        }

    }

    import javax.microedition.lcdui.Canvas;
    import javax.microedition.lcdui.Command;
    import javax.microedition.lcdui.CommandListener;
    import javax.microedition.lcdui.Displayable;
    import javax.microedition.lcdui.Graphics;


    public class KeyCanvas extends Canvas implements CommandListener
    {
        private String key = "Press any key";

        protected void paint(Graphics g)
        {
            g.setColor(255, 255, 255);
            g.fillRect(0, 0, getWidth(), getHeight());
            g.setColor(0, 0, 0);
            g.drawString(key, getWidth() / 2, getHeight() / 2, Graphics.TOP
                    | Graphics.HCENTER);

        }

        public void keyPressed(int keyCode)
        {
            key = keyCode + " is pressed";
            repaint();
        }

        public void keyReleased(int keyCode)
        {
            key = keyCode + " is released";
            repaint();
        }

      
        public void commandAction(Command arg0, Displayable arg1)
        {

        }

    }

  • (52RD.com)
    读取...
    顶一下
     更多J2ME资源 到J2ME论坛讨论
    ·热门文章 HOT
    ·功率放大器设计的关键:输出匹配电路...
    ·SD和MMC记忆卡介面技术
    ·uClinux下Nor Flash的JFFS2文件系统...
    ·新手必读:关于Linux,你所不了解的...
    ·Windows Mobile 5.0 模拟器
    ·移动终端天线设计技巧
    ·手机结构设计的一般准则
    ·智能手机:下一代嵌入式系统的界面
    ·未来手机功能的重大改进 (英)
    ·EMI防治技巧与挑战
    ·诺基压8801 EDGE手机拆解
    ·天线收发技术、构型设计动向
    ·Dopod 696上跑Windows Mobile 5.0
    ·Windows CE 模拟器和远程调试工具
    ·2006年手机产业发展方向(上)
    ·提高PA效率来增加手机的通话时间(英)
    ·Windows CE 3.0 源代码下载
    ·I²C介面的特性与应用
    ·手机外观设计新趋势
    ·GSM小区BCCH频点和BSIC规划设计的探讨
    ·精彩评论 HOT
    ·赞助商链接 SUPPORT
    ·相关文章 CORRELATION
    ·分析MIDP低级事件处理机制[12-22]
    ·分析MIDP的高级事件处理机制[12-22]
    ·基于MIDP实现Dialog组件[12-22]
    ·使用MIDP2.0开发游戏 (3) 添加背景和前景[12-18]
    ·使用MIDP2.0开发游戏 (2) 使用Sprite[12-18]
    ·特别推荐 RECOMMEND
    ·评  论 COMMENT
    1楼 匿名 发表于 2007-1-22 23:8
      烂码充数
    共有评论1篇 查看所有评论
    推荐朋友 打印本页