当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > JAVA > J2ME > 正文

J2ME入门-(7)使用Kjava事件处理的开发

http://www.zk168.com.cn  招考学习网 2006-4-11 3:24:24
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
J2ME入门-(7)使用Kjava事件处理的开发

第八章:使用Kjava事件处理的开发
介绍

在这一章,我们将学习 KJava 事件处理,并用简单的绘图应用程序 Scribble 来示范它是如何工作的。

KJava 事件处理模型不如 J2SE 的 action-listene 模型先进。通过使 Spotlet 类子类化,所有感兴趣的事件都是可访问的,无论怎样,KJava 应用程序都将完成这项工作。目前,只有 spotlet 受到了事件的关注。为了关注 spotlet,我们使用 register()。如要停止,则使用 unregister()。

注意:如果您用 WANT_SYSTEM_KEYS 注册一个 spotlet ,设备不会通过按下按钮和排队等候停止它的应用程序来自动终止这个应用程序。相反,按下按钮事件会通报这个应用程序,然后负责适当地处理事件。除非当按下按钮时您提供一种通过调用 System.exit 终止应用程序的方法,否则这个应用程序将会继续不确定地运行。唯一能终止这个应用程序的方法就只有重启该设备。

KJava 支持三种基本类型事件:显示屏上笔的移动、键盘输入和电子束定向发送/接收。另外,还有一种全面的包罗万象的方法 -- unknownEvent()。在后面的章节中我们将讨论这些不同的事件类型。

处理笔的移动

处理 PDA 显示器上笔的移动的事件处理程序有:penDown、penMove 和 penUp。

当用户将笔在显示器上移动时,penDown() 方法将被调用,它传递显示器上笔的放置点的 X 和 Y 轴坐标。

public void penDown( int x, int y )

当用户在显示器上移动笔时 penMove() 过程将被调用。X 和 Y 轴坐标定义笔的当前位置。

public void penMove( int x, int y )

当用户将笔从显示器上移开时 penUp() 过程将被调用,它传递两个参数:笔被移开点的 X 和 Y 轴坐标。

public void penUp( int x, int y )
处理键盘输入,电子束定向发送/接收,以及未知事件

在 J2SE AWT 中,接口 java.awt.event.KeyListener 包含处理不同键盘事件的 keyPressed、keyReleased 和 keyTyped。与此相比,KJava 则只有一个函数,keyDown()。

如果用户在可书画区写下一个字符,按下计算器或菜单图标,或者是按下任何“硬键”(缺省情况下,Date Book、Address、page up、page down、To Do List 或是 Memo Pad key )时,事件 keyDown 就会被调用。参数 keyCode 标识用户输入的键的代码。如果按了其中一个“硬键”,事件 keyDown 就开始匹配这个类中定义过的相应常量中的一个。

public void keyDown( int keyCode )

beamReceive() 方法被用于接收从红外线 Palm 设备传来的数据包。数据以一种字节数组的方式被接收,并用虚拟机自动分配这些数据。

public static boolean beamReceive( byte[] data )beamSend() 方法不是一个事件处理程序,但是它显然与 beamReceive() 相关联,所以我们在这儿还是要提一下。这种方法被用来给发送到另一个红外线 Palm 设备的数据包定向。在给数据定向时,您可以调用这个函数,但是目标设备必须在接收数据的 spotlet 中注册一个 beamReceive 处理器。

public static boolean beamSend( byte[] data )

unknownEvent 是一个常规的所有未知事件处理例程。

public void unknownEvent( int event, java.io.DataInput in )
Scribble 应用程序介绍

现在我们了解了事件处理的基础,我们即将进入更为高级一些的 J2ME 开发。在本章中,我们将开发 Scribble 应用程序。我们不会逐行描述代码,但是,我们将描绘重要的代码行和每个方法的目的。您可从参考资料上访问完整的代码清单。

Scribble 应用程序是一个独立的应用程序,示范使用 Sun 公司的 KJava API 开发 Palm 操作系统。Scribble 允许您在显示屏上徒手绘图,或添加想要的正规文本。
开始使用 Scribble

在 HelloWorld 应用程序中,我们需要导入 Scribble 应用程序要使用的类。下面是标识被 Scribble 使用的类的文本块:

import com.sun.kjava.Bitmap;

import com.sun.kjava.Button;

import com.sun.kjava.Dialog;

import com.sun.kjava.Graphics;

import com.sun.kjava.HelpDisplay;

import com.sun.kjava.Spotlet;

Scribble 类扩展了 J2SE 中使用的 Spotlet 类。它从定义最终的静态类变量开始。

public class Scribble extends Spotlet

类变量 g 担当了对单独的 Graphics 对象的引用,该对象在类中始终被使用:
static Graphics g = Graphics.getGraphics ();
定义方法和事件处理程序

此外,main() 定义了应用程序的主要入口。
public static void main(String[] args)

默认的构造程序,Scribble 初始化成员变量,清屏并画出初始框架。

public Scribble()

paint() 方法负责更新或刷新显示。它使用类变量 g -- 一个 Graphics 对象,类似于 Java 2 AWT 中使用的 Graphics 对象。

private void paint()

penDown() 方法执行事件处理程序来处理在屏幕上放置笔的事件。它通过 X 和 Y 坐标来定位。在 Scribble 中,程序测试 Clear 或 Exit 按钮是否被按下,如果按下的话,就处理相应的事件。

public void penDown(int x, int y)

keyDown() 方法处理那些在 Palm 设备的即兴书画框内随手写下的东西。传送到这个方法中的整型值 keyCode 就是输入的字符键值。在 Scribble 应用程序中,我们存储了成员变量 lastKey 中被按下的键,然后调用 paint() 方法刷新屏幕。

public void keyDown(int keyCode)

penMove() 方法处理在屏幕上拖动笔的事件。在 Scribble 中,它负责用笔绘画。

public void penMove(int x, int y)

使用的最后一个方法 clearDrawingArea(),在用户按下 Clear 按钮时由 penDown 事件处理程序调用。由于它仅在 Scribble 类的内部使用,所以 clearDrawingArea() 是一个私有方法。
private void clearDrawingArea()

(未完待续)
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·环保企业人力资源开发与管理的实证研究————巨龙公
·重油制气污水处理系统(A/O)技术改造
·英美CPA管理模式及其启示
·改造NERA微波公务信道为国产监控信道
·EAStudio让电子商务网站如虎添翼
·基于PB6和ORACLE8开发“劳动信息管理系统”
·巧解Pretty  Park 病毒一例
·CDMA在中国的应用以及向CDMA2000的过度中的问题研究
·SMA施工控制与现场监理
·浅谈改性沥青及SMA路面平整度的控制
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>