Display类管理系统的显示和输入设备。它包含一些用于获得设备特性和请求把对象显示在设备上的方法。其它一些处理设备属性的方法,主要用于Canvas对象,所以在Canvas类中定义。

每个MIDlet应用程序只有唯一一个Display实例,应用程序可以通过调用getDisplay()方法获得该实例的一个引用。应用程序可以在程序执行的任何时候调用getDsiplay()方法。所有由getDisplay()方法返回的Display对象在程序执行过程中将保持一致。

 一个典型应用程序将执行以下行为以响应对其MIDlet方法的调用:

startApp - 应用程序从暂停状态转到运行状态。这时将完成应用程序运行时所必须的对象初始化。如果初始画面没有设置,应用程序可以调用setCurrent()方法来设置它。注意startApp()可以被多次调用,如果pauseApp()在其间被调用。这意味着一次性初始化不应该在这里而应该在MIDlet的构造函数里执行。

pauseApp - 应用程序可以暂停它的进程。同样,如果有必要在应用程序重新进入运行态时显示另一个画面,新的画面要通过setCurrent()方法设置。

destroyApp - 应用程序应该释放所占资源,中止线程,等等。在destroyApp()方法返回之后对用户界面对象的方法调用所产生的行为是未定义的。

显示在显示设备上的用户界面对象被包含在一个Displayable对象中。在任何时候应用程序只能有最多一个Displayable对象被用来显示在显示设备上并用来同用户交互。这个Displayable就是所谓的current Displayable。

Display类拥有一个setCurrent()方法来设置current Displayable,拥有一个getCurrent()方法来获得current Displayable。应用程序拥有对它的current Displayable的控制权,并且可以在任何时候调用setCurrent()方法。通常,应用程序会改变current Displayable以响应一些用户行为。不仅如此,另一个线程可能会改变current Displayable以响应其它因素。current Displayable同样会因为一个Alert部件的timer消逝而被改变。

应用程序的current Displayable不一定物理的绘制在屏幕上,一个用户事件(比如按键)的发生也不一定必需被定向到current Displayable。这种情况的发生可能是因为在同一个设备上同时运行着另一个应用程序。

 一个应用程序被称为前台程序如果它的current Displayable在显示设备上是确实可见的且用户输入设备事件将被传递给它。如果一个应用程序不是前台程序,它就缺乏获得显示屏和输入设备的权限,这样的应用程序被称为是后台程序。把这些设备分配给不同应用程序的规则超出本介绍的范围而且是在被称为应用程序管理器的管理之下。

就像上面提到的,一个应用程序即使是后台程序仍有它的current Displayable。current Displayable是非常重要的,即使对后台程序来讲,因为current Displayable总是在下一次应用程序被调入前台时被显示。应用程序可以通过调用isShown()方法来确定一个Displayable是否可见。在Canvas类里,Canvas被显示时将调用showNotify()方法,隐藏时调用hideNotify()方法。

 每个MIDlet应用程序都有自己的current Displayable。这意味着getCurrent()方法返回MIDlet的current Displayable,不管该程序是位于前台还是位于后台。举个例子,假设一个工作在前台的应用程序拥有一个current Displayable F,一个工作在后台的应用程序拥有一个current Displayable B,当前台程序调用getCurrent()时,方法返回F,当后台程序调用getCurrent()时,方法返回B。另外,两个程序无论谁调用setCurrent()方法来改变current Displayable都不会对另一个程序的current Displayable有影响。

getCurrent()方法可能会返回null。这会在程序启动时,在MIDlet应用程序调用setCurrent()设置它的初始屏幕之前发生。getCurrent()方法不会在应用程序调用setcurrent()之前返回任何指向Displayable对象的引用。

系统页面

通常情况下,前台应用程序的当前页面在屏幕上是可见的。然而,在一些特殊情况下,系统会生成一个页面临时覆盖应用程序的当前页面。这个页面被称为系统页面。当系统需要显示一个命令菜单或是系统需要用户在一个单独的页面而不是在一个表单的文本框里编辑文本。即便系统页面覆盖了应用程序页面,当前页面的概念仍旧不变。特别的,当系统页面可见的时候,对方法getCurrent()的调用将返回应用程序的当前页面,而不是系统页面。当current Displayable被系统页面覆盖时,对方法isShown()的调用将返回false。

如果系统页面覆盖了一个canvas,canvas的hideNotify()方法将被调用。当系统页面撤销时,canvas的showNotify()方法和接下来的paint()方法将被调用。如果系统页面用于用户发出命令,commandAction()方法将会接着showNotify()方法调用。

本类包含了获得高级用户接口中主前景色和主后景色的一些方法。这些方法在生成同其它用户接口组件一致的CustomItem对象和在Canvas中生成符合系统其它用户接口的用户接口是很有用的。应用程序在用户接口上没有被限制在应用前景色和后景色上(比如,它们可以应用高亮和阴影产生斜面的效果)但是反回的都是那些在执行环境色彩方案很好适应的颜色。一个应用程序包含一个自定义的组件应该用背景色清除它然后用前景色画上字符和几何图形(线条,弧形,矩形)

Field Detail

public static final int LIST_ELEMENT

List 元素图像的图像类型。

LIST_ELEMENT的值为1.

Since: MIDP 2.0

CHOICE_GROUP_ELEMENT

pubic static final int CHOICE_GROUP_ELEMENT

ChoiceGroup 元素图像的图像类型

CHOICE_GROUP_ELEMENT的值为2

Since: MIDP 2.0

ALERT

Public static final int ALERT

Alert 图像的图像类型

ALERT的值为3

Since: MIDP 2.0

COLOR_BACKGROUND

Public static final int COLOR_BACKGROUND

配合getColor使用的颜色指定符。COLOR_BACKGROUND指定屏幕的背景色。背景色总是和前景色相对。

COLOR_BACKGROUND 值为0。

Since: MIDP 2.0

COLOR_FOREGROUND

public static final int COLOR_FOREGROUND

配合getColor使用的颜色指定符。COLOR_FOREGROUND指定屏幕上的文本字符和简单的图形的前景色。静态字符和用户可编辑字符应该用前景色绘制。前景色总是和背景色相对。

COLOR_FOREGROUND值为1。

Since: MIDP 2.0

COLOR_HIGHLIGHTED_BACKGROUND

public static final int COLOR_HIGHLIGHTED_BACKGROUND

配合getColor使用的颜色指定符。COLOR_HIGHLIGHTED_BACKGROUND指定焦点或焦点高亮的颜色,当焦点被画做一个可填充的矩形。高亮背景色总是和高亮前景色相对。

COLOR_HIGHLIGHTED_BACKGROUND 值为2。

Since: MIDP 2.0

COLOR_HIGHLIGHTED_FOREGROUND

public static final int COLOR_HIGHLIGHTED_FOREGROUND

配合getColor使用的颜色指定符。COLOR_HIGHLIGHTED_FOREGROUND指定的是文本字符和简单图形高亮显示时的颜色。高亮前景色是用来同高亮背景色相对的描绘高亮文本和图形的颜色。高亮前景色总是和高亮背景色相对。

COLOR_HIGHLIGHTED_FOREGROUND值为3。

Since: MIDP 2.0

COLOR_BORDER

Public static final int COLOR_BORDER

配合getColor使用的颜色指定符。COLOR_BORDER指定当一个对象是在非高亮状态下描绘时的盒子和边框的颜色。边框颜色是同背景色一同使用并和它区分开。应用程序应该用getBorderStyle()返回的笔划模式来描绘边框。

COLOR_BORDER的值为4。

Since: MIDP 2.0

COLOR_HIGHLIGHTED_BORDER

Public static final int COLOR_HIGHLIGHTED_BORDER

配合getColor使用的颜色指定符。COLOR_HIGHLIGHTED_BORDER 指定对象高亮显示时盒子和边框的颜色。边框高亮颜色是同背景色(不是高亮背景色)一同使用并和它区分开。应用程序应该用getBorderStyle()返回的笔划模式来描绘边框。

COLOR_HIGHLIGHTED_BORDER值是5。

Since: MIDP 2.0