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应用驻留在移动设备上,用户可得到这些应用,不一定需要连接到网络上
2.WAP-----移动设备运行一个访问Internet的浏览器
3.J2ME----J2ME应用驻留在移动设备上,用户可得到这些应用,不一定需要连接到网络上
3.J2ME体系结构(up--to---down)
1)Profile
2)Configuration && Libraries
3)KVM(CVM)
4)Host Operating System
1)Profile
2)Configuration && Libraries
3)KVM(CVM)
4)Host Operating System
API部分
I.用户界面支持:提供的类程序包是javax.microedition.lcdui
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()方法可以销毁(中止)该对象.在运行状态
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
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包的组成部分
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 ---例如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()方
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(){
}
例:
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));
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是定位点,字体初始
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;
}
例:
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);
字体,类型,大小
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)
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[](一组小图片)
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给滚动条改变信息
构造函数很简单,就是滚动条滚动的字符,可以用本身的方法setString给滚动条改变信息
Date属于java.util包,它的作用是返回当前的时间.
Date()
TimeZone 属于java.util包 这个对象的作用是提供关于时区的信息。
TimeZone()
TimeZone()
Calendar(日历)属于java.util包,它提供更为详细的时间信息
Calendar()
Calendar.get(Calendar.YEAR)
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的的监听器
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=Display.getDisplay(this)
}
调用Display对象的静态方法getDisplay()获取屏幕对象,实例化display对象.推荐在过早函数中完成
MIDlet程序的运行流程
构造函数--->startAPP()---->监听事件,接受命令---->commandAction()方法--->
调用别的方法----->如果是exit命令----->pauseApp()------->destroyApp()方法.
构造函数--->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显示出来
}
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();
}
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.*
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的类型
构造函数与TextBox的一摸一样,唯一不同的是TextField是单行,所以尽量不要设置超过屏幕宽度的大小,第4个代表时email的类型
DateField 与TextField一样,都继承item,不能直接显示在屏幕上,只能作为容器的子项目显示,比如加载在Form的对象中,
DateField(String label, int mode)
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
StringItem(String label, String text)
sItem1=new StringItem("S1Label","aiyoaiyo