高级界面开发
1:基本界面和CommandCommand
CLDC(1.1):java.io---标准JavaIO包,J2SEIO包的子集
java.lang——核心语言包,J2SE核心语言包的子集
java.util——工具包
javax.microedition.io——CLDC通用连接框架类和接口。
MIDP(2.0+)
javax.microedition.midlet——MIDlet类包, 只包含一个MIDlet类可作为所有MIDlet的父类
javax.microedition.lcdui——界面类包,对GUI组件提供支持,
javax.microedition.rms——记录管理系统,支持数据库系统的不同类和接口,它们随后存储和检索MIDlet所用的数据 javax.microedition.lcdui.game——Game API,MIDP2.0游戏编程扩展
javax.microedition.media——多媒体类包
javax.microedition.media.control——多媒体控制类包
javax.microedition.pki——数字签名类包
另外还有javax.microedition.io包中的一部分类。
创建第一个MIDlet
MIDlet(Mobile Information Devices let):手机上运行的J2ME应用程序,即移动信息设备小程序。以后我们编写的就是MIDlet
用Eclipse创建第一个MIDlet
MIDlet在应用中可能存在的状态:
运行(Active)状态—程序正在运行中;
暂停(Paused)状态
调用notifyPaused( )函数,MIDlet立刻进入此状态;
MIDlet持有的所有资源暂时被释放,但它随时可能被运行;
销毁(Destroyed)状态
调用notifyDestroyed( )函数,MIDlet立刻进入此状态;
MIDlet被永久地关闭并且释放占用的所有资源,等待着废物清理程序的处理。
运行,打包
配置文件:MANIFEST
用来描述MIDletSuite的配置,如:名称、版本、开发商等;MANIFEST 文件为纯文本文件,文件扩展名为.mf.
MANIFEST 必须包含以下属性:
MIDlet-Name—MIDletSuite 的名称
MIDlet-Version—MIDletSuite 的版本号,格式为主版本.次版本.微版本,例如0.0.0,这也是版本号的默认值。版本号主要用于安装或升级。
MIDlet-Vendor —MIDletSuite 的提供商
JAD属性的说明
JAD 描述文件为纯文本文件,文件扩展名为.jad;说明具体的运行配置,以及Jar文件所在的位置的信息
JAD 描述文件必须提供如下属性:
MIDlet-Name—略
MIDlet-Version—略
MIDlet-Vendor—略
MIDlet-Jar-URL—下载该MIDletSuite 的URL 地址。虽然这里可以使用绝对位置或相对位置,但还是建议用绝对位置。
MIDlet-Jar-Size—JAR 文件的大小,计算单位为字节。
精解Display和Displayable
Display的其他作用
获取设备支持的颜色: numColors()
是否支持彩色:isColor()
背景颜色,前景颜色:COLOR_BACKGROUND ,COLOR_FOREGROUND
边框颜色,高亮边框色:COLOR_BORDER , COLOR_HIGHLIGHTED_BORDER
高亮背景色,高亮前景色:COLOR_HIGHLIGHTED_BACKGROUND , COLOR_HIGHLIGHTED_FOREGROUND
Displayable的其他作用
设置标题: setTitle
添加删除命令按钮: addCommand,removeCommand
按钮类型
通过构造函数设置长标签
按钮类型(按照数字1-8排序,注意,这个数字不是优先级):SCREEN,BACK,CANCEL,OK,HELP,STOP,EXIT,ITEM,可用于:
SCREEN:面向整个屏幕组件进行操作
BACK:返回上一个操作时可用
CANCEL,OK: 在有是否选择的情况下可用
HELP:想要出现在线帮助时可用
STOP:停止某个操作而不做屏幕切换
EXIT:退出当前应用程序时可用
ITEM:面向屏幕的局部进行操作
千万注意:所有的事件代码需要自己写,按钮类型只是提供了一个分类而已
多个按钮加入界面的排布规律
不同种类的按钮,WTK优先级排序: ITEM,SCREEN,OK, HELP, BACK, EXIT ,CANCEL , STOP,优先级高按钮优先显示在上方
同一种类的按钮,在构造函数内划分优先级,数字越小越优先
BACK,CANCEL, EXIT, STOP倾向于抢占左方,优先顺序: BACK,CANCEL, EXIT, STOP
注意:只是在WTK内满足这个规律,其他模拟器可能不相同
Command事件和List
命令按钮的事件响应
第一步:编写一个类,实现CommandListener
第二步:重写里面的CommandAction方法,编写事件响应代码
第三步:Displayable.setCommandListener()方法,将Displayable和和该类绑定
List基本知识
List创建时的三种类型
IMPLICIT:互斥
EXCLUSIVE:另一种互斥
MULTIPLE:可以多选
List选项维护
添加项,设置图片: append(“str”, Image.createImage(“filepath”))
删除项: delete
修改项: set
得到某项文本或者图片
设置字体:setFont(int,Font.getFont(face,style,size))
获得List选项
List选择事件——只针对IMPLICIT类型的List
List.setCommandListener()可以和事件响应接口直接绑定
Command类型以List.SELECTEDCCOMMAND标定
得到选择的项
对于单选:getSelectedIndex(),getString()
对于多选:方法1:遍历各个选项,判断每项有没有被选;方法2:getSelectedFlags然后判断哪些项被选
TextBoxTextBox,Ticker,Ticker和AlertAler
创建TextBox,指定标题,文字,最大长度,输入限制
常见输入限制:TextField.ANY
获得光标位置getCaretPosition()
获取文本: getString()
插入文本:insert
替换文本:setString,setChars
删除文本:delete
Ticker及其用法
生成滚动条:Ticker
显示/隐藏滚动条:setTicker
获取或设置滚动条内容:set/getString
提示窗口: Alert
重要内容:
title:标题
alertText:提示信息
alertImage:图片
alertType:类型
ALARM:提醒
CONFIRMATION:确认
ERROR :错误
INFO :通知
WARNING :警告
setTimeout(inttime):设置持续时间
利用Display进行切换
表单元素
Item的子类,可以通过Form. append(Itemitem)添加到界面上,不再占据整个屏幕
ChoiceGroup和前面学习的List类似,除了可以实现单选和复选之外,还可以实现下拉菜单
类型的确定:
Choice.EXCLUSIVE: 单选
Choice.MULTIPLE: 复选
Choice.POPUP: 下拉菜单
其他和List类似
DateField利用getDate得到相应的时间
创建DataField时的模式:
DataField.DATE:只显示或修改日期
DataField.TIME:只显示或修改时间
DataField.DATE_TIME:显示或修改日期时间
Gauge几个基本属性:重要方法:getValue,setValue
label:标题
interactive:是否可以修改进度条的值
maxValue:最大值
initialValue:初始值
ImageItem
几个基本属性:
label:标题
image:图像
layout:布局方式:常见左对齐,右对齐,居中等,可以通过|多选
altText:图像不能装载时的提示文字
TextField
TextField和TextBox的区别:不能直接作为屏幕显示
常见限制:
TextField.ANY:任意字符
TextField.EMAILADDR:Email
TextField. NUMERIC:整数
TextField.DECIMAL:小数
TextField.PASSWORD:密码
TextField.UNEDITABLE:不可编辑
其他用法和Textbox类似
StringItem
在屏幕上显示一个字符串
常见属性
label:标题
text: 内容
appearanceMode: 显示方式
Item.PLAIN Item.BUTTON Item.HYPERLINK
表单元素事件
ItemCommandListener
适用于在表单上将某个表单元素和命令按钮绑定
用CommandListener能否做到?
要点:
按钮加到Item上
实现ItemCommandListener
Item和实现类对象绑定
按钮用ITEM类型
ItemStateListener
某个表单元素状态改变时触发事件
要点:
实现ItemStateListener
Form和实现类对象绑定
案例11
1:基本界面和CommandCommand
CLDC(1.1):java.io---标准JavaIO包,J2SEIO包的子集
java.lang——核心语言包,J2SE核心语言包的子集
java.util——工具包
javax.microedition.io——CLDC通用连接框架类和接口。
MIDP(2.0+)
javax.microedition.midlet——MIDlet类包, 只包含一个MIDlet类可作为所有MIDlet的父类
javax.microedition.lcdui——界面类包,对GUI组件提供支持,
javax.microedition.rms——记录管理系统,支持数据库系统的不同类和接口,它们随后存储和检索MIDlet所用的数据 javax.microedition.lcdui.game——Game API,MIDP2.0游戏编程扩展
javax.microedition.media——多媒体类包
javax.microedition.media.control——多媒体控制类包
javax.microedition.pki——数字签名类包
另外还有javax.microedition.io包中的一部分类。
创建第一个MIDlet
MIDlet(Mobile Information Devices let):手机上运行的J2ME应用程序,即移动信息设备小程序。以后我们编写的就是MIDlet
用Eclipse创建第一个MIDlet
MIDlet在应用中可能存在的状态:
运行(Active)状态—程序正在运行中;
暂停(Paused)状态
调用notifyPaused( )函数,MIDlet立刻进入此状态;
MIDlet持有的所有资源暂时被释放,但它随时可能被运行;
销毁(Destroyed)状态
调用notifyDestroyed( )函数,MIDlet立刻进入此状态;
MIDlet被永久地关闭并且释放占用的所有资源,等待着废物清理程序的处理。
运行,打包
配置文件:MANIFEST
用来描述MIDletSuite的配置,如:名称、版本、开发商等;MANIFEST 文件为纯文本文件,文件扩展名为.mf.
MANIFEST 必须包含以下属性:
MIDlet-Name—MIDletSuite 的名称
MIDlet-Version—MIDletSuite 的版本号,格式为主版本.次版本.微版本,例如0.0.0,这也是版本号的默认值。版本号主要用于安装或升级。
MIDlet-Vendor —MIDletSuite 的提供商
JAD属性的说明
JAD 描述文件为纯文本文件,文件扩展名为.jad;说明具体的运行配置,以及Jar文件所在的位置的信息
JAD 描述文件必须提供如下属性:
MIDlet-Name—略
MIDlet-Version—略
MIDlet-Vendor—略
MIDlet-Jar-URL—下载该MIDletSuite 的URL 地址。虽然这里可以使用绝对位置或相对位置,但还是建议用绝对位置。
MIDlet-Jar-Size—JAR 文件的大小,计算单位为字节。
精解Display和Displayable
Display的其他作用
获取设备支持的颜色: numColors()
是否支持彩色:isColor()
背景颜色,前景颜色:COLOR_BACKGROUND ,COLOR_FOREGROUND
边框颜色,高亮边框色:COLOR_BORDER , COLOR_HIGHLIGHTED_BORDER
高亮背景色,高亮前景色:COLOR_HIGHLIGHTED_BACKGROUND , COLOR_HIGHLIGHTED_FOREGROUND
Displayable的其他作用
设置标题: setTitle
添加删除命令按钮: addCommand,removeCommand
按钮类型
通过构造函数设置长标签
按钮类型(按照数字1-8排序,注意,这个数字不是优先级):SCREEN,BACK,CANCEL,OK,HELP,STOP,EXIT,ITEM,可用于:
SCREEN:面向整个屏幕组件进行操作
BACK:返回上一个操作时可用
CANCEL,OK: 在有是否选择的情况下可用
HELP:想要出现在线帮助时可用
STOP:停止某个操作而不做屏幕切换
EXIT:退出当前应用程序时可用
ITEM:面向屏幕的局部进行操作
千万注意:所有的事件代码需要自己写,按钮类型只是提供了一个分类而已
多个按钮加入界面的排布规律
不同种类的按钮,WTK优先级排序: ITEM,SCREEN,OK, HELP, BACK, EXIT ,CANCEL , STOP,优先级高按钮优先显示在上方
同一种类的按钮,在构造函数内划分优先级,数字越小越优先
BACK,CANCEL, EXIT, STOP倾向于抢占左方,优先顺序: BACK,CANCEL, EXIT, STOP
注意:只是在WTK内满足这个规律,其他模拟器可能不相同
Command事件和List
命令按钮的事件响应
第一步:编写一个类,实现CommandListener
第二步:重写里面的CommandAction方法,编写事件响应代码
第三步:Displayable.setCommandListener()方法,将Displayable和和该类绑定
List基本知识
List创建时的三种类型
IMPLICIT:互斥
EXCLUSIVE:另一种互斥
MULTIPLE:可以多选
List选项维护
添加项,设置图片: append(“str”, Image.createImage(“filepath”))
删除项: delete
修改项: set
得到某项文本或者图片
设置字体:setFont(int,Font.getFont(face,style,size))
获得List选项
List选择事件——只针对IMPLICIT类型的List
List.setCommandListener()可以和事件响应接口直接绑定
Command类型以List.SELECTEDCCOMMAND标定
得到选择的项
对于单选:getSelectedIndex(),getString()
对于多选:方法1:遍历各个选项,判断每项有没有被选;方法2:getSelectedFlags然后判断哪些项被选
TextBoxTextBox,Ticker,Ticker和AlertAler
创建TextBox,指定标题,文字,最大长度,输入限制
常见输入限制:TextField.ANY
获得光标位置getCaretPosition()
获取文本: getString()
插入文本:insert
替换文本:setString,setChars
删除文本:delete
Ticker及其用法
生成滚动条:Ticker
显示/隐藏滚动条:setTicker
获取或设置滚动条内容:set/getString
提示窗口: Alert
重要内容:
title:标题
alertText:提示信息
alertImage:图片
alertType:类型
ALARM:提醒
CONFIRMATION:确认
ERROR :错误
INFO :通知
WARNING :警告
setTimeout(inttime):设置持续时间
利用Display进行切换
表单元素
Item的子类,可以通过Form. append(Itemitem)添加到界面上,不再占据整个屏幕
ChoiceGroup和前面学习的List类似,除了可以实现单选和复选之外,还可以实现下拉菜单
类型的确定:
Choice.EXCLUSIVE: 单选
Choice.MULTIPLE: 复选
Choice.POPUP: 下拉菜单
其他和List类似
DateField利用getDate得到相应的时间
创建DataField时的模式:
DataField.DATE:只显示或修改日期
DataField.TIME:只显示或修改时间
DataField.DATE_TIME:显示或修改日期时间
Gauge几个基本属性:重要方法:getValue,setValue
label:标题
interactive:是否可以修改进度条的值
maxValue:最大值
initialValue:初始值
ImageItem
几个基本属性:
label:标题
image:图像
layout:布局方式:常见左对齐,右对齐,居中等,可以通过|多选
altText:图像不能装载时的提示文字
TextField
TextField和TextBox的区别:不能直接作为屏幕显示
常见限制:
TextField.ANY:任意字符
TextField.EMAILADDR:Email
TextField. NUMERIC:整数
TextField.DECIMAL:小数
TextField.PASSWORD:密码
TextField.UNEDITABLE:不可编辑
其他用法和Textbox类似
StringItem
在屏幕上显示一个字符串
常见属性
label:标题
text: 内容
appearanceMode: 显示方式
Item.PLAIN Item.BUTTON Item.HYPERLINK
表单元素事件
ItemCommandListener
适用于在表单上将某个表单元素和命令按钮绑定
用CommandListener能否做到?
要点:
按钮加到Item上
实现ItemCommandListener
Item和实现类对象绑定
按钮用ITEM类型
ItemStateListener
某个表单元素状态改变时触发事件
要点:
实现ItemStateListener
Form和实现类对象绑定
案例11
package prj7_1;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.ImageItem;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.ItemStateListener;
import javax.microedition.lcdui.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class MessageMIDlet extends MIDlet implements CommandListener,ItemStateListener{
private Display dis;
/******************欢迎界面**********************/
private Form welcomeForm = new Form("欢迎界面");
private ImageItem welcomeItem;
private Command cmdExit = new Command("退出程序",Command.EXIT,1);
private Command cmdWriteMsg = new Command("写短信",Command.SCREEN,1);
/******************短信编辑界面*******************/
private Form frmMsg = new Form("请您输入短信");
private TextField tfMsg = new TextField("","",255,TextField.ANY);
private Command cmdMsgBack = new Command("返回",Command.BACK,1);
private Command cmdMsgDel = new Command("清除文本",Command.BACK,1);
private Command cmdSend = new Command("发送",Command.SCREEN,1);
/******************发送界面**********************/
private TextBox tbPhone = new TextBox("请您输入对方号码","",15,TextField.NUMERIC);
private Command cmdPhoneBack = new Command("返回",Command.BACK,1);
private Command cmdOK = new Command("确定",Command.SCREEN,1);
public MessageMIDlet() {
/******************欢迎界面初始化**********************/
Image welcomeImg = null;
try{
welcomeImg = Image.createImage("/welcome.png");
}catch(Exception ex){
ex.printStackTrace();
}
welcomeItem = new ImageItem("欢迎您的到来",welcomeImg,Item.LAYOUT_CENTER,"");
}
protected void startApp() throws MIDletStateChangeException {
dis = Display.getDisplay(this);
dis.setCurrent(welcomeForm);
/******************欢迎界面初始化**********************/
welcomeForm.append(welcomeItem);
welcomeForm.addCommand(cmdExit);
welcomeForm.addCommand(cmdWriteMsg);
/******************短信编辑界面初始化*******************/
frmMsg.append(tfMsg);
frmMsg.addCommand(cmdMsgBack);
frmMsg.addCommand(cmdSend);
/******************发送界面初始化**********************/
tbPhone.addCommand(cmdPhoneBack);
tbPhone.addCommand(cmdOK);
/******************事件绑定代码***********************/
welcomeForm.setCommandListener(this);
frmMsg.setCommandListener(this);
tbPhone.setCommandListener(this);
frmMsg.setItemStateListener(this);//Item状态事件
}
public void commandAction(Command c,Displayable d){
if(c==cmdExit){
this.notifyDestroyed();
}
else if(c==cmdWriteMsg){
dis.setCurrent(frmMsg);
}
else if(c==cmdMsgBack){
dis.setCurrent(welcomeForm);
}
else if(c==cmdMsgDel){
int position = tfMsg.getCaretPosition();
tfMsg.delete(position-1, 1);
if(tfMsg.size()==0){
frmMsg.removeCommand(cmdMsgDel);
frmMsg.addCommand(cmdMsgBack);
}
}
else if(c==cmdSend){
dis.setCurrent(tbPhone);
}
else if(c==cmdPhoneBack){
dis.setCurrent(frmMsg);
}
else if(c==cmdOK){
System.out.println("短信成功发出");
System.out.println("短信内容:"+tfMsg.getString());
System.out.println("短信发送目的地"+tbPhone.getString());
}
}
public void itemStateChanged(Item item) {
if(item==tfMsg){
if(tfMsg.size()!=0){
frmMsg.removeCommand(cmdMsgBack);
frmMsg.addCommand(cmdMsgDel);
}
}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
}