command对象
发信站: 北大未名站 (2001年10月20日20:33:56 星期六) , 站内信件
在前面我们其实已经使用过command对象了。j2me的事件系统比较特殊,你必须首先定义一系列的命令,然后注册到容器对象中,例如(form、alert、list、textbox),再设定命令监听者
,编写好commandaction()方法即可。当系统发送某个命令,便由commandaction()方法进行统筹处理。下面的程序演示了如何定义多个命令以及如何编写commandaction()方法。
package fancy.test;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class cmd extends midlet implements commandlistener
{
private display display;
private form props;
private command backcommand = new command("back", command.back, 2);
private command cancelcommand = new command("cancel", command.cancel, 1);
private command exitcommand = new command("exit", command.exit, 1);
private command helpcommand = new command("help", command.help, 1);
private command itemcommand = new command("item", command.item, 1);
private command okcommand = new command("ok", command.ok, 1);
private command screencommand = new command("screen", command.screen, 1);
private command stopcommand = new command("stop", command.stop, 1);
public cmd()
{
display = display.getdisplay(this);
}
public void startapp()
{
props = new form("hello world");
props.append("hello world!/n");
props.addcommand(backcommand);
props.addcommand(cancelcommand);
props.addcommand(exitcommand);
props.addcommand(helpcommand);
props.addcommand(itemcommand);
props.addcommand(okcommand);
props.addcommand(screencommand);
props.addcommand(stopcommand);
props.setcommandlistener(this);
display.setcurrent(props);
}
public void showscreen(string cmd)
{
form form=new form("show cmd");
form.append(cmd);
form.addcommand(exitcommand);
form.setcommandlistener(this);
display.setcurrent(form);
}
public void commandaction(command c, displayable s)
{
if (c == exitcommand)
{
destroyapp(false);
notifydestroyed();
}
else if(c==helpcommand)
{
showscreen("help");
}
else if(c==backcommand)
{
showscreen("back");
}
else if(c==cancelcommand)
{
showscreen("cancel");
}
else if(c==itemcommand)
{
showscreen("item");
}
else if(c==okcommand)
{
showscreen("ok");
}
else if(c==screencommand)
{
showscreen("screen");
}
if(c==stopcommand)
{
showscreen("stop");
}
}
public void destroyapp(boolean unconditional)
{
}
public void pauseapp()
{
display.setcurrent(null);
props = null;
}
}
在上面的程序(cmd.java)中定义了八个命令。如果commandaction()方法接到这八个命令,多半是调用showscreen()方法,将这几个命令输出。showscreen()方法会产生一个新的容器对象(form),作为当前的屏幕,并把截获的命令显示在屏幕中。
cmd.java的运行效果如下2图所示(当屏幕出现hello world字样的时候,你需要按下退出键,命令菜单就会出现了,你可以依次执行各个命令)。
textbox文本框对象
发信站: 北大未名站 (2001年10月20日20:36:34 星期六) , 站内信件
textbox是一个容器类型的对象(和form的性质一样)。用法如下所示:
package fancy.test;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class showtextbox extends midlet implements commandlistener
{
private display display;
private textbox txtbox;
private command exitcommand = new command("exit", command.exit, 1);
public showtextbox()
{
display = display.getdisplay(this);
}
public void startapp()
{
//or :
//string str="hello world";
//txtbox = new textbox("text box",str,str.length(),0);
//the follow code is wrong:
//txtbox = new textbox("text box",str,any number here,0);
txtbox = new textbox("text box",null,200,0);
txtbox.addcommand(exitcommand);
txtbox.setcommandlistener(this);
display.setcurrent(txtbox);
}
public void commandaction(command c, displayable s)
{
if (c == exitcommand)
{
destroyapp(false);
notifydestroyed();
}
}
public void destroyapp(boolean unconditional)
{
}
public void pauseapp()
{
display.setcurrent(null);
txtbox = null;
}
}
请注意textbox类的构造函数,第一个参数实际上是窗口的名称(因为textbox是一个容器,可能是当前屏幕的显示对象),第二个参数是缺省值,第三个参数是输入字符的总长度。如果你设置了文本框的缺省值,那么第三个参数必须是缺省字符的长度。如果第三个参数的值和缺省字符的长度不一样,那么程序运行不成功(编译可以通过)。如果你将第二个参数置为null值,那么第三个参数可以任意设。
showtextbox.java的运行效果如下图所示:
textfield文本域对象
发信站: 北大未名站 (2001年10月20日20:37:59 星期六) , 站内信件
textfield和textbox有点相似,不过textbox是多行的,而textfield是单行的。而且textbox是容器类型的对象,但是textfield是项目类型的对象,只能够被容器包含,不能够单独显示。
textfield文本域对象的用法如下所示:
package fancy.test;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class showtextfield extends midlet implements commandlistener
{
private display display;
private form props;
private textfield txtfield;
private command exitcommand = new command("exit", command.exit, 1);
public showtextfield()
{
display = display.getdisplay(this);
}
public void startapp()
{
props = new form("hello world");
props.append("hello world!/n");
txtfield=new textfield("email:", "", 15,textfield.emailaddr);
props.append(txtfield);
props.addcommand(exitcommand);
props.setcommandlistener(this);
display.setcurrent(props);
}
public void commandaction(command c, displayable s)
{
if (c == exitcommand)
{
destroyapp(false);
notifydestroyed();
}
}
public void destroyapp(boolean unconditional)
{
}
public void pauseapp()
{
display.setcurrent(null);
props = null;
}
}
请注意startapp()方法,我们使用form对象作为当前屏幕的显示对象,而将textfield对象作为form的一个子项目显示。下面来介绍textfield类的构造函数,第一个参数是文本域的名称,第二个参数是缺省值,第三个参数是长度,第四个参数是文本域的类型,可选的值有: textfi
eld.password、textfield.emailaddr、textfield.phonenumber、textfield. url、textfi
eld. numeric等等。构造好textfield对象之后,调用form的append()方法将它添加到form对
象的子项目中。showtextfield.java程序的运行效果如下图所示:
datefield对象
发信站: 北大未名站 (2001年10月20日20:39:14 星期六) , 站内信件
datefield对象和textfield对象一样同属于项目类型的对象,不能够单独显示,必须作为容器对象的子项目显示。datefield对象的作用是显示一个日期,它和windows控制面板中的时间和日期设置程序有点近似。datefield对象的用法如下所示:
package fancy.test;
import javax.microedition.midlet.*;
import javax.microeditio
闽公网安备 35060202000074号