5. Alert
一个alert是一个显示文本和图像的普通的screen。它通知用户出错及另外一些异常信息。一个alert可以是模式的,也可以是定时的。
一个模式的alert在用户取消它之前一直停留在屏幕上,其时,它可能回到显示它之前的屏幕状态,或者转到一个由应用程序特别选择的屏幕。当你要求用户作出选择时,这是很有用的。如,你可能显示信息如"Are you sure?"并给出选项"Yes"和"No"。注意MIDP系统会自动 提供一种方法以取消一个模式的alert。如,在Sun的实现中,它提供了一个映射到软按钮的Done命令。
一个定时的alert,则被显示指定(一般为几秒钟)的时间。在显示一条用户可能还不了解的信息时,这是很有用的。例如,你可能要显示如"Your message has been sent"的信息。但是,如果你指定一个定时的alert以一下子显示太长的信息,它会自动转换成一个模式的alert!
你可以用Alert类来创建一个alert:
public Alert(String title); public Alert(String title,String alertText,Image alertImage,AlertType alertType); |
第一个构造器创建一个定时的alert。注意,这里的定时值并没有指定。然而,alert 将使用默认的timeout值,这个值可以用不可改变的getDefaultTimeout( )方法取得。如果你想要到改变alert的timeout,可以用setTimeout()方法并传入一个整数值以指明以毫秒为单位的timeout值。要获得alert当前的timeout值,可以用getTimeout()方法。
public int getDefaultTimeout( ); public int getTimeout( ); public void setTimeout(int t); |
例如,下列代码创建一个定时的alert,并且其timeout值设置为4秒:
Alert alert = new Alert("title"); alert.setTimeout(4000); |
另外你能传入常量Alert.FOREVER。
alert.setTimeout(Alert.FOREVER); |
你还可以用第二个构造器创建一个更细致的alert。该构造器允许你使用Image 对象在该alert上加上一个图标。而且,一个alert可以有一个类型,以指定这个alert的特性。当这种alert出现在用户面前时,MIDP 实现体可以用这一类型来播放一段合适的音响。AlertType类共提供五种类型的alert:AlertType.ALARM, AlertType.CONFIRMATION, AlertType.ERROR, AlertType.INFO还有AlertType.WARNING。作为一实例,下面的代码段创建一个AlertType.CONFIRMATION类型的alert,其上并不显示图标:
public Alert(String title, String messageString, Image alertImage,lertType alertType); |
如果你想忽略图像,标题,文本或者alert类型的话,你可以把第二个构造器中所有的参数置为null。构造器中每个这些附加的属性在Alert类中都有相应的存取函数:
public Image getImage( ); public String getString( ); public AlertType getType( ); public void setImage(Image img); public void setString(String str); public void setType(AlertType type); |
现在,我们来看一个既有定时alert又有模式alert的例子。下面的代码生成一个文本框对象和一个定时alert。当激活MIDlet 时,将显示该alert,五秒钟后文本框将自动显示出来。
TextBox tb = new TextBox("text box","Welcome to MIDP GUI Programming", 40, TextField.ANY); Alert timedAlert = new Alert("Confirmation","Your message has been sent!", null, AlertType.CONFIRMATION); TimedAlert.setTimeout(5000); Display display = Display.getDisplay(this); Display.setCurrent(timedAlert, tb); |
图 5展示了上面的代码是如何被显示的。一个提示"Your message has been sent!"的alert先被显示出来。五秒钟后,显示转到一个文本框,显示"Welcome to MIDP GUI Programming。"
 图 5.一个定时alert的例子 |
如前面的例子所见,定时的alert不需要用户介入。另一方面,模式alert一直显示着,直到用户取消之,见下面例子。
TextBox tb = new TextBox("text box","Welcome to MIDP Programming", 40,Textfield.ANY); Alert modalAert = new Alert("Error", "Network error. Please try again later.", null, AlertType.ERROR); modalAlert.setTimeout(Alert.FOREVER); Display display = Display.getDisplay(this); display.setCurrent(modalAlert, tb); |
这时,显示网络错误的屏幕一直显示着,直到用户使用对应于Done命令的软键取消之,如图6所示。模式alert情况下的Done命令是由Sun公司的MIDP参考实现中自动提供的。在这个例子中,文本框屏幕仅在用户取消该alert后变成当前屏幕。
 图 6.一个模式alert的例子 |