`

高级界面开发

    博客分类:
  • J2ME
阅读更多
高级界面开发
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

	}



}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics