做手机的程序开发,肯定就会涉及到图形处理方面的问题咯。与事务处理一样,midp将图形介面处理
也分成了高级图形介面处理与低级图形介面处理。同样,高级图形介面处理方法是可以方便移值的,但是
功能有限,低级图形介面功能强大,但是再移值以后可能会需要更改部分代码。高级图形介面都需要继承
screen,而低级图形介面则继承canvas,并大量使用graphics所定义的图形处理方法。midp所使用的图形
介面类都属于前面代码中都用过的javax.microedition.lcdui这个package里面。在同一时间(只是同一
时间)内canvas和scree的子类只能存在一个。
screen类中有四个子类,alert,list,textbox,form。其中form是属于没有任何使用介面的元素,
它只是一个容器,可以容纳其他item类在其中用来组合一个复杂的图形使用介面。而其他几个子类则属于
封装了预定的固定图形介面,只能单独的拿来使用。这个其实就和html里面各种输入框与form之间的关系
一样。
呵呵,和以前学其他开发语言一样,一个个的来测试这些子类的各种使用方法。^_^用实际第程序来
说明之间第关系和之间第区别。
一、list
1)choice.implicit
package com.graph;
/**
* @author you li
*
* copyright (c) 2005
*/
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class implisttest extends midlet implements commandlistener {
private display display;
public implisttest() {
// todo 自动生成构造函数存根
display = display.getdisplay(this);
}
protected void startapp() throws midletstatechangeexception {
// todo 自动生成方法存根
list alist = new list("listtest",choice.implicit) ;
alist.append(" a ",null);
alist.append(" b ",null);
alist.append(" c ",null);
alist.append(" d ",null);
alist.setcommandlistener(this);
display.setcurrent(alist);
}
protected void pauseapp() {
// todo 自动生成方法存根
}
protected void destroyapp(boolean arg0) throws midletstatechangeexception {
// todo 自动生成方法存根
}
public void commandaction(command command, displayable display) {
// todo 自动生成方法存根
system.out.println("command action start … …");
if(command==list.select_command){
list test= (list) display ;
int selected = test.getselectedindex() ;
system.out.println(" item " + selected + "selected") ;
}
}
}
当我们运行这个程序的时候会发现屏幕上出现4个选项,答应出选定的选项的indexid,由此可以看出
来choice.implicit的选项被选中,它会马上使用setcommandlistener()方法注册内容,并同时呼叫comma
dnaction()方法。同时通过commadnaction()方法的第一个参数判断是否使用的是choice.implicit选项。
2)choice.exclusive
package com.graph;
/**
* @author you li
*
* copyright (c) 2005
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class exclisttest extends midlet implements commandlistener {
private display display;
command commit ;
public exclisttest() {
// todo 自动生成构造函数存根
display = display.getdisplay(this);
}
protected void startapp() throws midletstatechangeexception {
// todo 自动生成方法存根
commit = new command("提交",command.screen,1) ;
list alist = new list("listtest",choice.exclusive) ;
alist.append(" a ",null) ;
alist.append(" b ",null) ;
alist.append(" c ",null) ;
alist.addcommand(commit) ;
alist.setcommandlistener(this) ;
display.setcurrent(alist) ;
}
protected void pauseapp() {
// todo 自动生成方法存根
}
protected void destroyapp(boolean arg0) throws midletstatechangeexception {
// todo 自动生成方法存根
}
public void commandaction(command command, displayable display) {
// todo 自动生成方法存根
system.out.println("commadn action start… …");
if(command == commit){
list tmp = (list) display ;
int selected = tmp.getselectedindex() ;
system.out.println("item " + selected + "selected") ;
}
}
}
运行这个程序我们会发现choice.exclusive和choice.implicit之间第区别了。choice.exclusive不
会在我们选择以后马上运行commandaction()方法,我们只能commit的系统选项菜单来完成最后第提交。
当我们点击系统菜单的commit以后会执行commandaction()方法。
3)、choice.multiple
/**
* @author you li
*
* copyright (c) 2005
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class multlisttest extends midlet implements commandlistener {
private display display;
command commit;
public multlisttest() {
display = display.getdisplay(this);
}
protected void startapp() throws midletstatechangeexception {
// todo 自动生成方法存根
commit = new command("提交",command.screen,1);
list alist = new list("listtest",choice.multiple);
alist.append(" a ",null) ;
alist.append(" b ",null) ;
alist.append(" c ",null) ;
alist.addcommand(commit);
alist.setcommandlistener(this);
display.setcurrent(alist);
}
protected void pauseapp() {
// todo 自动生成方法存根
}
protected void destroyapp(boolean arg0) throws midletstatechangeexception {
// todo 自动生成方法存根
}
public void commandaction(command command, displayable display) {
// todo 自动生成方法存根
system.out.println("commadn action start… …");
if(command == commit){
list tmp = (list) display;
int num = tmp.size();
for(int i = 0;i< num;i++){
if(tmp.isselected(i)){
system.out.println("item " + i + "selected");
}
}
}
}
}
这个程序里面我们使用了choice.multiple,也就是多选框的使用。和choice.exclusive一样,只有当
我们使用系统菜单commit以后才会调用commandaction()方法,来进行操作。
二、alert和alerttype
windows,还有一般页面上的对话框见多了,这个alert其实也就是这个作用。它属于screen的子类,
我们可以用display累的setcurrent()方法将它显示在屏幕上,当然,当alert设置喂屏幕画面的时候系统
本身一定要存在一个画面,不然alert无法跳回,会抛出一个错误出来。如果我们喂alert对象设置其aler
ttype的属性alerttype.alarm,alert.forever以后那么需要我们点击系统确认键才会从alert窗口返回原
始窗口。一个简单的例子如下:
只有当显示“窗口”的时候设置了alerttype.alarm,alert.forever属性,所以需要点击“done”以
后alert对象才会关闭。
package com.graph;
/**
* @author you li
*
* copyright (c) 2005 www.iguess.com.cn
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class alerttest extends midlet implements commandlistener{
private display display;
command commit;
public alerttest() {
display = display.getdisplay(this);
}
protected void startapp() throws midletstatechangeexception {
// todo 自动生成方法存根
list alist = new list("listtest",choice.implicit) ;
alist.append(" 窗口 ",null) ;
alist.append(" 确认 ",null) ;
alist.append(" 错误 ",null) ;
alist.append(" 信息 ",null) ;
alist.append(" 警告 ",null) ;
alist.setcommandlistener(this) ;
display.setcurrent(alist) ;
}
protected void pauseapp() {
// todo 自动生成方法存根
}
protected void destroyapp(boolean arg0) throws midletstatechangeexception {
// todo 自动生成方法存根
}
public void commandaction(command command,displayable dis){
if(command == list.select_command){
alert alert = new alert("窗口测试") ;
list temp = (list) dis ;
switch(temp.getselectedindex()){
case 0 :
alert.settype(alerttype.alarm) ;
alert.setstring(" 窗口 ") ;
alert.settimeout(alert.forever) ;
display.setcurrent(alert) ;
break ;
case 1 :
alert.settype(alerttype.confirmation) ;
alert.setstring(" 确认 ") ;
display.setcurrent(alert) ;
break ;
case 2 :
alert.settype(alerttype.error) ;
alert.setstring( "错误 ") ;
display.setcurrent(alert) ;
break ;
case 3 :
alert.settype(alerttype.info) ;
alert.setstring(" 信息 ") ;
display.setcurrent(alert) ;
break ;
case 4 :
alert.settype(alerttype.warning) ;
alert.setstring(" 警告 ") ;
display.setcurrent(alert) ;
break ;
}
}
}
}
