J2ME学习知识介绍

J2ME学习知识介绍

Java 2微型版J2ME-----着重于无线通信环境,J2ME多数特征是从J2SE派生出来的.主要的几个特征
I. 可移植性
II.跨不同产品的内在一致性
III. 跨网络的安全性
IV. 与J2SE和J2EE的兼容性
2.无限开发应用的另一种方法是通过无限应用协议(Wireless Application Protocol)(WAP),WAP应用开发比较简单,因为它重用了现有的Web技
术,WAP不是为了使用HTML而设计的,为生成动态的WAP内容,你可以使用Servlets和JSP或无线标准语言(WML)
1.尽管WAP和J2ME是互补技术,但它们以不同的方式进行操作
2.WAP-----移动设备运行一个访问Internet的浏览器
3.J2ME----J2ME应用驻留在移动设备上,用户可得到这些应用,不一定需要连接到网络上
3.J2ME体系结构(up--to---down)
1)Profile
2)Configuration && Libraries
3)KVM(CVM)
4)Host Operating System
API部分
I.用户界面支持:提供的类程序包是javax.microedition.lcdui
II.网络支持:提供的类程序包是javax.microedition.io
III. 数据持续存储支持:提供的类程序包是javax.microedition.rms
IV.其他例外处理及Timer等类的支持

MIDlet介绍
1.MIDlet是使用MIDP特征和CLDC配置的MIDlet应用
1).MIDLet是打包成JAD(JAVA描述符)文件的java类文件
2).MiDlet运行在已安装与MIDP设备上的Application Management Software(应用管理软件AMS).AMS提供KVM和MIDlets的环境
3).MIDlet是在支持CLDC和MIDP的手持设备中使用
2.MIDlet的生命周期
new MIDlet的对象时,首先是Paused状态,调用startApp()方法后进入到运行状态,再运行destroyApp()方法可以销毁(中止)该对象.在运行状态
中也可以调用pauseApp()方法也可以使该对象暂停

MIDP中的API
1 MIDP中的特定类和接口
1)javax.microedition.midlet-----是最内层的包,只包含一个MIDlet类,它为MIDP应用提供了基本功能开支
2)javax.microedition.io-----包括HTTPConnection接口,通过这个接口,MIDlet设备可访问Web中的数据
3)javax.microedition.lcdui(Liquid Crystal Display User Interface液晶显示用户界面)-----对GUI组件提供支持,有与java.awt同样的功
能,javax.microedition.lcdui包中的类和接口更适用与小屏幕的手持设备.
4)javax.microedition.rms(记录管理系统)-----支持数据库系统的不同类和接口,它们随后存储和检索MIDlet所用的数据
MIDlet 中的GUI(图形)编成
1.概述
MIDP为运行在MIDP容器中的MIDP应用定义了一个API,此API本身是建立在CLDC API之上的.MIDP用户接口API的JAVA类设计不是基于JAVA
Abstract Window Toolkit(AWT)类的,而是为移动电话这类小型移动信息设备特别设计的.这类设备只有有限的屏幕尺寸和键盘性能.党程序员采
用MIDP编写图形应用时,它们只能使用MIDP或者CLDC API;
2.MIDP GUI类
1)所有MIDP GUI类都是javax.microedition.lcdui包的组成部分
2)MIDP用户接口的基本抽象图形是屏幕,Screen类对面向设备的图形和用户交互进行了封装.每次只能显示一个屏幕.
3)MIDP API 具有"高级(high-level)和低级(low-level)UI类
高级UI ---例如Form,List,TextBox,Ticker,Alert,TextField,ChoiceGroup,Gauge
低级UI---例如Canvas类允许操作者任意绘画
3.MIDP GUI中主要的泪
1)Graphics类---提供了用来绘画2D几何对象的Graphics对象
javax.microedition.lcdui.Graphics类不是在MIDlet中显示创建的,表示抽象画面的Canvas类在MIDP GUI编成中提供了paint()方法,paint()方
法取类型为Graphics的一个参数,用此参数实现MIDlet中的Graphics类的功能
2)Displayable类----是一个抽象类,Displayable对象处理MIDLet的GUI输出,它有两个派生类,javax.microedition.lcdui.Canvas和
javax.microedition.lcdui.Screen.
3)Canvas类---Canvas类允许操作者任意绘画,与Graphics类都是低级UI,由Graphics类提供的方法总是在Canvas类的派生类中使用
4)Screen类----Screen是高级UI,Form,List,TextBox,Alert等等都是它的派生类
Canvas:
Canvas为抽象类,如果想让Canvas的类显示在屏幕上必须让一个类来继承Canvas,并且覆盖paint()方法,此方法吃初始化被调用一次,类似线程
start()方法
例:
myCanvas extends Canvas{
public myCanvas(){
}
public void paint(Graphic g){ //paint方法被调用时,自动生成一个Graphics的对象,而g就是这个实际对象
g.setFont(new Font(Font.FACE_SYSTEM,Font.Stype_BOLD,Font.SIZE_LARGE));
}
}
Graphics 的drawString()方法
g.drawString("text",int x,int y,int anchor);
第一是要输入的文本信息,第2个和第3个是x和y轴,可以用getWidth()和getHeigth()获取手机屏幕的最大宽度和高度,anchor是定位点,字体初始
化的定位Graphics.TOP|g.HCENTER 比较麻烦阿嗄
键盘上的select键也属于Command的对象,所以如果要产生行为,必须放在CommandAction()这个方法类
List:
List的对应的select键需要用.getSelectedIndex()来获取用户点击的项目(String [])
例:
switch(menu.getSelectedIndex()){
case 0: display.setCurrent(subForm1);break;
case 1: display.setCurrent(subForm2);break;
case 2: display.setCurrent(subTextBox);break;
}
上面的例子的意思是说,如果用select键选择了哪一个String对象,就做xxx事.....
Font :
Font font;类没有构造函数,一般用静态方法getFont方法来赋值
Font font=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDIUM);
字体,类型,大小
学习内容:Image,ImageItem,ChoiceGroup,Gauge,Ticker,Date,TimeZone,Calendar,

ImageItem 对象是一个Item类的对象,它的作用是在容器中显示图片.
3个步骤
1.构造一个Image对象(Image对象并不属于Item类,所以不能直接加载到容器中)
Image myImage=Image.createImage("/test/x.png");
createImage()方法是Image类的静态方法,它的作用是根据图形文件创建一个Image对象
2.构造ImageItem对象
ImageItem(String label, Image img, int layout, String altText)
ImageItem(String label, Image image, int layout, String altText, int appearanceMode)
第一个label(图片标签),第2个Image对象(一张图片),第3个Layout(布局),,第4个altText不明白 ,第5个也不明白
ImageItem imageItem=new ImageItem("name",myImage,ImageItem.LAYOUT.DEFAULT,"Cannot be shown");

ChoiceGroup继承extends Item,可被放置在容器中,它与list类似,不同的是list本身就算是一个容器,不需要放在另外的容器中
ChoiceGroup(String label, int choiceType)
ChoiceGroup(String label, int choiceType, String[] stringElements, Image[] imageElements)
构造函数 第一个String(标签),第2个(类型),第3个String[](一组字符串数组),Image[](一组小图片)

Gauge extedns Item ,它的作用是一个进度条
Gauge(String label, boolean interactive, int maxValue, int initialValue)
构造函数 第一个String(标签),boolean(用户能否改变其值),int (最大值),int (初始值)
Gauge firstGauge=new Gauge("FirstGauge",true,100,0);
Ticker extends Item 它的作用相对一一个滚动消息框,在屏幕上方显示滚动的信息,可以给容器加载滚动信息条,比如Form类,List类,TextBox类
Ticker(String str)
构造函数很简单,就是滚动条滚动的字符,可以用本身的方法setString给滚动条改变信息
Date属于java.util包,它的作用是返回当前的时间.
Date()
TimeZone 属于java.util包 这个对象的作用是提供关于时区的信息。
TimeZone()
Calendar(日历)属于java.util包,它提供更为详细的时间信息
Calendar()
Calendar.get(Calendar.YEAR)
 
学习内容:MIDlet类,lcdui包,Display类,Form类,Command类,List类,TextBox类,TextField类,DateField类,StringItem类
Form类的主要方法,append();addCommand()添加按钮事件,setCommandListener 添加按钮监听器
MIDlet类需要覆盖的3种方法,startApp()(开始程序,类似线程的start()),pauseApp()暂停,destroyApp()停止
Display类主要方法:notifyDestroyed();Display类主要方法getDisplay; 获得当前的显示
List 列表类,主要方法与Form类似,
TextBox,信息输入区域
TextField,DateField,StringItem 都是extends Item类,必须放在容器Form中

必须要用到的包
import javax.microedition.MIDlet.*;
import javax.microedition.lcdui.*;
j2me程序一般继承MIDlet类,实现CommandListener接口,
public class myMIDlet extedns MIDlet implements CommandListener
'
MIDlet"":
CommandListener:手机按键监听器,类似Key的的监听器
private Display display;

Display代表屏幕,显示区域 display=Display.getDisplay(this) 获得当前这个对象的屏幕
private Form mainForm;

Form类是容器的一种,在里面也可以添加(append) 字符串(string) 物件(item) 图像(image)
private Command exitCommand=new Command("Exit",Command.EXIT,1);

参数格式("名称(String",常量(Command的类变量),优先级(估计是按键的优先级)

J2ME的事件处理机制和J2SE的事件处理机制不太一样。在J2ME程序中,必须预先定义一些Command对象,注册到程序中。当设备发生了某个事件,会产生相应的Command对象,并把它传递给一个事件处理函数----commandAction(),由它对所产生的事件做统筹处理.不象J2SE 的事件对象是根据事件源的改变而自动产生事件对象
public Hello(){
display=Display.getDisplay(this)
}
调用Display对象的静态方法getDisplay()获取屏幕对象,实例化display对象.推荐在过早函数中完成
MIDlet程序的运行流程
构造函数--->startAPP()---->监听事件,接受命令---->commandAction()方法--->
调用别的方法----->如果是exit命令----->pauseApp()------->destroyApp()方法.

Command exitCommand=new Command("exit",Command.EXIT,1);
其中Command.XXX代表的是键盘上的某个按键
public void startApp(){
mainForm=new Form("PigMaMa"); //实例化mainForm,....
mainForm.append("ZhuBaBa"); //Form容器也可以加载字符串,也可以算作一个TextArea把
mainForm.addCommand(exitCommand); //添加exitCommand这个事件进这个mainForm
mainForm.setCommandListener(this); //设置mainForm的监听器为new出来的对象
display.setCurrent(mainForm); //将mainForm显示出来
}
startApp()方法.父类的抽象方法,在子类中必须覆盖.将Exit命令注册到Form对象(mainForm)中,这样Form对象(mainForm)可以对该命令作出响应。设置Form对象mainForm的命令监听者。
public void commandAction(Command c,Displayable s){
if(c==exitCommand){
destroyApp(false);
notifyDestroyed();
}
}
destroyApp()方法的作用是退出程序并销毁程序对象。pauseApp()方法的作用是暂停程序,并销毁容器对象或者是画布对象。手机屏幕将会是一片空白。
javax.microedition.lcdui:用户界面包,主要用于构造程序的用户界面。
Command、Form都是这个包的类。
javax.microedition.rms:这个包实现了对手机数据的存取功能。
javax.microedition.midlet:这个包是MIDlet程序的声明周期包,主要定义了MIDlet类,MIDlet类是一个抽象类,里面声明了startApp()、destroyApp()、pauseApp()等抽象方法。
javax.microedition.io:网络IO包。有HttpConnection接口和Connection接口、Datagram接口。
java.io.*
java.lang.*
java.util.*
上面这三个包属于J2ME核心包,J2ME中的核心包和J2SE中的同名核心包有些差别,主要是功能大大简化了,许多类、方法都没有了,只能实现一些最基本的功能。

List也属于javax.microedition.lcdui包,同样和Form一样是容器
list类似选择列表
list=new List("ChooseURL",Choice.EXCLUSIVE); //第一个String 为选择框名称,第2个int型常量为选的列表的类型
Choice.EXCLUSIVE 为普通的单选列表
Choice.MULTIPLE 可以多选
Choice.IMPLICIT 为普通选择
list.append("www.oursm.com",null); //第一个String 为名称,第2个Image的对象为图形

TextBox 容器..文本输入框,类似TextArea 继承screen
textBox=new TextBox("XBOX","Please Input",200,0);
构造函数第一String(容器名),第二String(初始文本),输入字符的长度,第3个限制输入字符的长度,第4个是类型,0代表无类型
TextField 和AWT中的TextField类似,TextField是单行表示的,TextBox是多行的,继承item类,可以被有append()方法的容器加载,自己本身单独不能被显示

TextField(String label, String text, int maxSize, int constraints)
textField=new TextField("EMAIL:", "null", 15,TextField.EMAILADDR);
构造函数与TextBox的一摸一样,唯一不同的是TextField是单行,所以尽量不要设置超过屏幕宽度的大小,第4个代表时email的类型
DateField 与TextField一样,都继承item,不能直接显示在屏幕上,只能作为容器的子项目显示,比如加载在Form的对象中,
DateField(String label, int mode)
dateField=new DateField("DATE:",DateField.TIME);
构造函数第String(为名称),第2个位........不知道
StringItem对象和TextField,DateField对象相似,同样继承item类,必须放在容器中,它的作用就是在容器对象中显示一条字符串,给我感觉像标签
StringItem(String label, String text)
sItem1=new StringItem("S1Label","aiyoaiyo