作者:mingjava 文章来源:http://www.j2medev.com/Article/ShowArticle.asp?ArticleID=16
在MIDP中没有提供Dialog组件,但是提供了一个Alert。Alert的功能有限,因此写一个Dialog组件是非常有必要的。本文将提供一个基于MIDP的Dialog组件,你可以在应用程序中使用它,功能强大且非常方便。
当我们开发应用程序的时候,有的时候需要询问用户是不是要继续下面的操作,比如删除一个电话号码,然后根据用户的不同的动作进入不同的流程。这时候我们需要一个像样的Dialog组件,很遗憾MIDP中并没有提供,但是我们可以用Canvas自己写一个。下面将简单介绍这个组件的设计,然后给出测试的MIDlet的源代码。希望对读者有帮助!
首先我们写一个抽象类Dialog,内容如下
import javax.microedition.lcdui.*;
public abstract class Dialog
{
protected Display display;
protected DialogListener listener;
protected Displayable restore;
private int eventID;
protected Dialog(Display display)
{
this.display = display;
}
public int getEventID()
{
return eventID;
}
public void setEventID(int eventID)
{
this.eventID = eventID;
}
public void dismiss(int code)
{
Displayable curr = display.getCurrent();
if (curr != getDisplayable())
return;
if (restore != null)
{
display.setCurrent(restore);
} else
{
display.setCurrent(new Form(""));
}
if (listener != null)
{
listener.dialogDismissed(this, code);
}
}
public void display()
{
Displayable curr = display.getCurrent();
Displayable dialog = getDisplayable();
if (curr != dialog)
{
restore = curr;
display.setCurrent(dialog);
}
}
public void display(int event)
{
Displayable curr = display.getCurrent();
Displayable dialog = getDisplayable();
this.eventID = event;
if (curr != dialog)
{
restore = curr;
display.setCurrent(dialog);
}
}
public DialogListener getDialogListener()
{
return listener;
}
protected abstract Displayable getDisplayable();
public void setDialogListener(DialogListener l)
{
listener = l;
}
}
你需要覆盖getDisplayable()方法返回一个Displayable的对象,当你调用dialog的display()方法的时候,你的YourDialog将会显示在屏幕上,有的时候你可能要传递一个事件值给后面的对象,那么你应该调用方法display(int event)。Dialog可以注册DialogListener,这个接口定义了一个方法,内容如下:
public interface DialogListener
{
void dialogDismissed(Dialog dialog, int code);
}
当Dialog显示的时候,我们提供给用户的界面是用WaitCanvas实现的,下面是他的代码:
import java.util.*;
import javax.microedition.lcdui.*;
public class WaitCanvas extends Canvas
{