3.2 Display与Displayable
MIDP中使用Display类对用户界面进行管理,与应用程序进行交互,而Displayable类及其子类对象则是可显示的用户界面,也就是Display类管理的对象。
3.2.1 Display类及其常用方法
Display:javax.microedition.lcdui.Display
Display类是显示屏幕和输入设备的管理对象,常用来获取设备的属性及显示屏幕对象,是每个MIDP程序不可或缺的对象,Display类的常用方法如表3-3所示。
表3-3 Display类的常用方法
Display对象是MIDP程序的中心控制者,通常通过在MIDlet实例中调用Display类的getDisplay()方法获取。
Display disp; disp=Display.getDisplay(this);
在每一个MIDP应用程序中Display对象是唯一的,this代表的是本类即MIDlet对象。
获取Display对象后就可以通过setCurrent()方法设置显示的屏幕对象。
disp.setCurrent(displayable); disp.setCurrent(alert,displayable);
第一种方法是设置displayable对象为当前显示对象,第二种方法是设置alert为当前显示对象,当alert显示结束后显示displayable对象。
除了显示屏幕对象外,还可以通过Display对象获取一些设备信息,代码参见【例3-1】。
【例3-1】 获取Display对象信息。
import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class mainMidlet extends MIDlet { Display disp; public mainMidlet() { disp=Display.getDisplay(this); System.out.println("当前显示屏幕对象"+disp.getCurrent()); System.out.println("---------------------------------"); System.out.println("是否支持彩色"+disp.isColor()); System.out.println("支持彩色的数目"+disp.numColors()); System.out.println("支持的透明层数"+disp.numAlphaLevels()); System.out.println("设备的背景颜色"+disp.getColor(Display.COLOR_ BACKGROUND)); System.out.println("---------------------------------"); System.out.println("是否支持震动效果"+disp.vibrate(100)); System.out.println("是否支持背景光颜色"+disp.flashBacklight(100)); System.out.println("---------------------------------"); System.out.println("当前笔触"+disp.getBorderStyle(false)); } protected void destroyApp(boolean arg0) throws MIDletStateChange Exception { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { } }
程序的执行结果如下:
当前显示屏幕对象null --------------------------------- 是否支持彩色true 支持彩色的数目4096 支持的透明层数256 设备的背景颜色16777215 --------------------------------- 是否支持震动效果false 是否支持背景光颜色false --------------------------------- 当前笔触1
注意:当使用不同的手机模拟器时,执行的结果是不一样的。
3.2.2 Display类与Displayable类之间的关系
如果说Display是MIDP程序的管理者,那么Displayable就是被管理的对象,通过对不同的Displayable对象进行操作就改变了应用程序的界面显示和用户交互。Displayable类本身是抽象类,不能直接实例化,具体的应用是通过其子类来完成的。Displayable类主要是提供一些常用的方法如表3-4所示。
表3-4 Displayable类的常用方法
Displayable是一个抽象类,主要是通过它的两个子类Canvas和Screen来实现界面的显示的,其中Screen为高级屏幕类,封装了完整的用户界面组件。下面是一个运用Display对象对高级屏幕类进行显示的实例,代码参见【例3-2】。
【例3-2】 运用Display对象显示高级屏幕类对象。
import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class mainMidlet extends MIDlet { Display disp; Form f; public mainMidlet() { disp=Display.getDisplay(this); f=new Form("欢迎来到手机世界"); } protected void destroyApp(boolean arg0) throws MIDletStateChange Exception { } protected void pauseApp() { } protected void startApp() throws MIDletStateChangeException { disp.setCurrent(f); } }
程序的执行结果如图3-3所示。
图3-3 程序执行结果
注意:在同一时刻应用程序最多只有一个Displayable对象被显示在屏幕上,如果多次调用setCurrent()方法,最后显示的对象将覆盖之前显示的对象。