Alert类
虽然Alert在显示一段时间之后,就会跳回原处,但是我们仍可以利用Alert类的setTimeout()函数,并传入Alert.FOREVER作为参数,此时Alert只有在用户按下上面的解除钮(Dismiss Command)时,才能跳回之前的画面,假设我们要实现一个类似Winzip的没有注册就会跳出对话框要求注册的功能,Alert类也能实现:
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
public class AlertRTest extends MIDlet {
private Display display;
boolean reg = false;
public AlertRTest() {
super();
display = Display.getDisplay(this);
}
private Display display;
boolean reg = false;
public AlertRTest() {
super();
display = Display.getDisplay(this);
}
protected void
startApp() {
// TODO 自动生成方法存根
Form f = new Form("主画面");
display.setCurrent(f);
if(!reg){
Alert at = new Alert("您还没有注册!您的试用期还有五天");
at.setType(AlertType.WARNING);
at.setTimeout(Alert.FOREVER);
at.setString("请尽快注册");
display.setCurrent(at);
}
}
// TODO 自动生成方法存根
Form f = new Form("主画面");
display.setCurrent(f);
if(!reg){
Alert at = new Alert("您还没有注册!您的试用期还有五天");
at.setType(AlertType.WARNING);
at.setTimeout(Alert.FOREVER);
at.setString("请尽快注册");
display.setCurrent(at);
}
}
protected void pauseApp() {
// TODO 自动生成方法存根
// TODO 自动生成方法存根
}
protected void destroyApp(boolean
arg0){
// TODO 自动生成方法存根
// TODO 自动生成方法存根
}
}
执行结果如下:
Alert/AlertType类
Alert是一个比较特殊的屏幕对象(Screen类的子类),当我们利用Display类的setCurrent()函数将它设
为目前显示在屏幕上的画图时,它会先发出一段声音,然后将自己显示在屏幕上,过一段时间后,
它会自动跳回之前的画面。值得注意的是,调用Display类的setCurrent()函数将Alert设为目前显示
在画面之前,系统本身一定要存在一个画面,这样才能让Alert有地方可以跳回(Alert的缺省行为)。
因此,如果我们在MIDlet一启动直接就将Alert设为第一个显示在屏幕上的画面的话,会发生错误信息
,除非我们利用setCommandListen()设定了自己的事件处理函数。
AlertType类是一个工具类,,本身无法实体化,但是它提供了几种已经定义好的AlertType,用以辅助Alert类的使用:
ALARM:警报
CONFIRMATOIN:确定
EEROR:错误
INFO:提供信息(Alert用作启动画图时,就是这种类型)
WARNING:警告
AlertType中惟一一个方法playSound(),可以用来发出这几种声音,看一个AlertType的范例:
import
javax.microedition.lcdui.AlertType;
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.midlet.MIDlet;
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.midlet.MIDlet;
public class AlertTypeTest extends MIDlet
implements CommandListener {
private Display display;
public AlertTypeTest() {
super();
display = Display.getDisplay(this);
// TODO 自动生成构造函数存根
}
private Display display;
public AlertTypeTest() {
super();
display = Display.getDisplay(this);
// TODO 自动生成构造函数存根
}
protected void
startApp() {
// TODO 自动生成方法存根
Form f = new Form("声音测试");
f.addCommand(new Command("确定",Command.SCREEN,1));
f.addCommand(new Command("警报",Command.SCREEN,1));
f.addCommand(new Command("错误",Command.SCREEN,1));
f.addCommand(new Command("提供信息",Command.SCREEN,1));
f.addCommand(new Command("警告",Command.SCREEN,1));
f.setCommandListener(this);
display.setCurrent(f);
}
// TODO 自动生成方法存根
Form f = new Form("声音测试");
f.addCommand(new Command("确定",Command.SCREEN,1));
f.addCommand(new Command("警报",Command.SCREEN,1));
f.addCommand(new Command("错误",Command.SCREEN,1));
f.addCommand(new Command("提供信息",Command.SCREEN,1));
f.addCommand(new Command("警告",Command.SCREEN,1));
f.setCommandListener(this);
display.setCurrent(f);
}
protected void
pauseApp() {
// TODO 自动生成方法存根
// TODO 自动生成方法存根
}
protected void
destroyApp(boolean arg0) {
// TODO 自动生成方法存根
// TODO 自动生成方法存根
}
public void
commandAction(Command c, Displayable s) {
// TODO 自动生成方法存根
String cmd = c.getLabel();
if(cmd.equals("确定")){
AlertType.CONFIRMATION.playSound(display);
}else if(cmd.equals("警报")){
AlertType.ALARM.playSound(display);
}else if(cmd.equals("错误")){
AlertType.ERROR.playSound(display);
}else if(cmd.equals("提供信息")){
AlertType.INFO.playSound(display);
}else if(cmd.equals("警告")){
AlertType.WARNING.playSound(display);
}
}
// TODO 自动生成方法存根
String cmd = c.getLabel();
if(cmd.equals("确定")){
AlertType.CONFIRMATION.playSound(display);
}else if(cmd.equals("警报")){
AlertType.ALARM.playSound(display);
}else if(cmd.equals("错误")){
AlertType.ERROR.playSound(display);
}else if(cmd.equals("提供信息")){
AlertType.INFO.playSound(display);
}else if(cmd.equals("警告")){
AlertType.WARNING.playSound(display);
}
}
}
执行结果如下:
再来看看Alert类,前面说了如果我们在MIDlet一启动直接就将Alert设为第一个显示在屏幕上的画面
的话,会发生错误信息,由于它的这种特性,所以我们可以把它看做是窗口系统上所使用的对话框,一般我们想对话框一直显示在屏幕上,等用户按下确定后,它才
会回到原来的画面,因此Alert最适合用来作一般应用程序常见的启动画面,我们可以用setCurrent()两个参数的方法,如:
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
public class AlertTest extends MIDlet {
private Display display;
public AlertTest() {
super();
display = Display.getDisplay(this);
// TODO 自动生成构造函数存根
}
private Display display;
public AlertTest() {
super();
display = Display.getDisplay(this);
// TODO 自动生成构造函数存根
}
protected void
startApp() {
// TODO 自动生成方法存根
Alert at = new Alert("应用程序正在启动");
at.setType(AlertType.INFO);
at.setTimeout(5000);
at.setString("程序正在初始化,请稍等");
Form f = new Form("主面图");
display.setCurrent(at,f);
}
// TODO 自动生成方法存根
Alert at = new Alert("应用程序正在启动");
at.setType(AlertType.INFO);
at.setTimeout(5000);
at.setString("程序正在初始化,请稍等");
Form f = new Form("主面图");
display.setCurrent(at,f);
}
protected void
pauseApp() {
// TODO 自动生成方法存根
// TODO 自动生成方法存根
}
protected void
destroyApp(boolean arg0) {
// TODO 自动生成方法存根
// TODO 自动生成方法存根
}
}
执行结果如下:
执行结果如下:
Alert有两个构造函数,一个是只有一个标题的,另外一个是具有四个参数,分别是指定标题/内含文字/影像以及类型。这上面的例子中,我们使用setType()来设定类型,用setString()来设定内含文字。
浙公网安备 33010602011771号