J2ME手机游戏设计与开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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()方法,最后显示的对象将覆盖之前显示的对象。