存在存储集中。
表2-7RMS包(不包含异常)
类
描述
类
RecordStore
允许访问记录存储集功能。
接口
RecordComparator
提供一个用来实现两个记录间比较的接口。
RecordComparation
提供记录存储集的枚举器;可以和比较器和过滤器联合使用。
recordFilter
对获取的数据进行过滤。
RecordListener
提供一个用来"监听"RMS中发生的事件的接口,比如记录增加,修改和删除。
2.4.8存储集(RecordStore)
记录存储集即一个记录存储的机制,表2-8中展示了完整的API。
表2-8记录存储API
方法
描述
存储集访问方法
StaticRecordStoreopenRecordStroe(StringrecordName,blooeancreateIfNecessary)
打开一个存储集或者在它不存在的时候创建一个存储集。
VoidcloseRecordStore()
关闭一个存储集。
StaticvoiddeleteRecordStore(StringrecordStoreName)
删除一个存储集。
LonggetLastModified()
获取存储集最后被修改的时间。
StringgetName()
获取存储集的名称。
intgetNumrecords()
返回存储集当前记录的数量。
intgetSize()
返回存储集使用的总字节数。
intgetSizeAvailable()
获取空闲空间。
intgetVersion()
获取存储集的版本号。
续表2-8记录存储API
StaticString[]listRecordStores()
获取MID中你可以访问的所有的记录存储集的字符串数组。
记录访问方法
intaddRecord(byte,intoffset,intnumBytes)
向存储集中加入一条新的记录。
byte[]getRecord(intrecordId)
用ID来获取一条记录。
intgetRecord(intrecorded,byte[]buffer,intoffset)
把一条记录读取到buffer中。
VoiddeletRecord(intrecorded)
删除与recordId相关的记录。
VoidsetRecord(intrecorded,byte[]newData,intoffset,intnumBytes)
使用新的字节数组与recordId相关联的内容。
IntgetNextRecordID()
在插入后获取下一个记录的ID。
IntgetRecord(intrecorded)
返回按字节计算的记录存储集当前的数据大小。
RecordEnumerationenumerateRecords(RecordFilterfilter,RecordComparator,bool-
-eankeepUpdataed)
返回一个RecordEnumerator对象。它是用来在一个记录集合中枚举的(使用comparator参数)。
与时间有关的方法
VoidaddRecordListener(RecordListenerlistener)
加入一个监听器对象,它可以在有这个记录存储集消息的时候被调用。
VoidremoveRecordLisrener(RecordListenerlistener)
移除原来用addRecordListener方法加入的监听器对象。
记录存储集在与MIDlet包范围,也就是说同一个包的任何MIDlet都可以访问这个包中的记录存储集,其他包中的MIDlet甚至不能感知到别的包里记录存储集的存在。
2.4.9记录
一个记录就是一个字节数组,可以在里面写任何格式的数据。可以用DataInputStream、DataOutputStream往记录中写入数据,也可以用ByteArrayInputStream和ByteArrayOutputStream。
在记录存储集中记录是以一种类表的结构存储,如下图2-2所示:
ID
Recorddata(bytearray)
1
"John"
2
"64997"
3
[.pngimagedata]
-
_
图2-2RecorddataStore"A"
每一个记录和它相关的字节数组都有一个整数主键唯一来标识,RMS会成为记录设定ID。头一个写入的ID是1,每次增加一条记录它的ID就增加1,上图展示了一个记录集的简单用法。在这个例子中,玩家的名字(字符串"John")存储在记录1中,记录2保存最高分,记录3是先前从网络上下载的缓存的图象。
2.4.10枚举
RMS支持使用Javax.microedition.rms.RecordEnumerator类来排序记录,如表2-9展示了它所有属于这个类中的全部的方法。
表2-9Javax.microedition.rms.RecordEnumerator类
方法
描述
常用方法
Voiddestroy()
销毁枚举器。
BooleanisKeptUpdated()
指出在下面的记录存储集改变后该枚举器是否自动更新生成。
keepUpdated(BooleankeepUpdated)
改变keepUpdated的状态。
Voidrebuild()
引起枚举器管理的索引重新生成。
续表2-9Javax.microedition.rms.RecordEnumerator类
Voidreset()
把枚举器设置成刚刚创建后的状态。
访问
BooleanhasNextElement()
测试在从前一个到最后一个的顺序中是否还有可以枚举的记录。
BooleanhasPreviousElement()
测试在从最后一个到前一个的顺序中是否还有可以枚举的记录。
Byte[]nextRecord()
获取存储集中的下一个记录。
Byte[]previousRecord()
获取存储集中的前一个记录。
IntpreviousRecoed()
获取前一天记录的ID。
IntnextRecord()
获取下一个记录的ID。
IntnumRecord()
获取记录的数量,这在你使用过滤器的时候是很重要的。
可以用记录存储集来访问枚举器,也可以使用枚举器在记录中双向遍历。如果反向遍历只需要使用previousRecord。
2.4.11异常
RMS异常都是因为不正确的环境造成的,对于这些异常需要编写代码来处理问题(RecordStoreNotFoundException、RecondStoreNotOpenException、InvalidRecordIDExcepaion的情况),或者只能接受它。
2.5用户界面(LCDUI
在创建游戏时,MIDP允许我们使用两种截然不同的界面系统--高级UI和低级UI。
2.5.1UI基础
LCDUI的核心是screen的概念,它代表MID上的一个display,在任何一个时间点,只能有一个screen可见。
在LCDUI中有3种类型的screen:
(1)低级UI可以通过Canvas类访问;
(2)Form显示一组简单的UI组件,或者说控件;
(3)复杂组件(Complexcomponents)。
2.5.2高级UI
高级UI提供了MID的一个抽象接口,通过它可以获得大量的功能。使用高级API首先创建组件把它们加入到屏幕,然后与它们相交互。高级UI一般划分为两大类:屏幕和组件。
(1)屏幕(screen)
screen是一个完整类组件,它管理整个屏幕。Form是一个特殊的screen,可以在Form中由少量几个组件来构造一个screen。
(2)列表(List)
List是一个可以给用户显示一组备选项的组件。这个类实现了Javax.microedition.lcdui.Choice接口,ChoiceCroupitem也实现了这个接口。
(3)文本框(TestBox)
TestBox组件是微型世界的字处理器,它只能输入多行的文字。它可以让玩家输入多行文字、剪切、复制以及从剪切板粘帖、过滤输入的数据。
(4)警告(Alert)
可以使用它来显示一个提示信息(因为它是一个screen,所以它接管整个屏幕)。
(5)Form和Item
Form是一种可以包含一个或者多个下面这些从Item类派生出来的组件的screen--StringItem、ImageItem、TextField、ChoieGroup、DataField和Gauge。
(6)StringItem类
运用StringItem类在Form上加入简单的文字消息。
2.5.3低级UI
低级UI提供了一个工具包来移动和绘制图形、显示文字、获取直接的按键事件等。
(1)Canvas类
Canvas又称画布,是一个Displayable对象,所有绘图操作都画在它上面。
(2)Graphics类
Graphics类工具在Canvas中承担基本的二维绘图。
(3)二维绘图工具
drawLine采用4个参数--直线起点的x、y坐标值和直线终点x、y的坐标值,例如:
graphics.drawLine(50,0,100,0);
这行代码会从位置(50,0)到(100,0)绘制一条直线。
绘制一个矩形是一个类似的过程,不同的只是需要用起点加上宽度和高度的方式来指定这个对象,可以绘制透明的或者填充的矩形,甚至可以绘制圆角的矩形。4个绘制矩形的方法是:drawRect、drawRoundedRect、fillRect和fillRo
上一篇:
JAVAD的网络三维技术(论文和程序)
下一篇:
试题库管理系统毕业论文