深入理解Display类的使用
作者:陈跃峰
Email:cqucyf@gmail.com
熟悉了MIDlet类的使用以后,下面来熟悉一下Display类的使用,这个类也是进行J2ME编程中经常要使用到的类之一。
Display类有两个最主要的作用:
1、 获得屏幕的属性。例如屏幕是否是彩色的,以及支持的颜色数量等信息。
2、 控制屏幕的显示。例如使屏幕显示某个指定界面或者获得当前的显示界面等。
其中,特别是第二个作用使用的更加频繁。
另外一个需要注意的地方是,每个MIDlet只有一个Display类型的对象,该对象控制该MIDlet程序中所有的显示控制。所以在创建Display对象时,必须指定该Display对象和哪个MIDlet对象对应。
在使用Display提供的功能以前,必须创建一个Display类型的对象,创建该对象的时候只能使用Display类中的静态方法getDisplay方法来进行创建,该方法的完整声明如下:
public static Display getDisplay(MIDlet m)
使用该方法可以创建一个代表MIDlet类型对象m的Display对象,一般我们可以在MIDlet类的构造方法中创建。例如创建一个MyMIDlet类的该对象,则可以使用如下的代码:
private Display display;
public MyMIDlet(){
display = Display.getDisplay(this);
}
因为以上代码书写在MyMIDlet类内部,则this关键字就代码MyMIDlet类型的对象。这样就创建了一个代表MyMIDlet的Display对象。
对象创建完毕了以后,就可以使用Display对象提供的功能了。
在MIDP1.0中,Display类提供的功能主要分为两个部分:
1、 获得屏幕的属性
l isColor——判断屏幕是否是彩色的
l numColors——如果是彩色手机,则获得支持的颜色数量,如果是黑白手机,则获得支持的灰度等级。
2、 控制屏幕的显示
在手机屏幕上可以直接显示的界面,全部都必须是Displayable的子类。控制显示主要分为两类方法:
l setCurrent——设置当前显示的界面对象
l getCurrent——获得当前显示的界面对象
除了以上方法以外,还有一个方法是:
l callSerially
该方法的作用是使指定的线程对象首先暂停,让系统首先完成屏幕的显示,等屏幕显示完毕以后再使线程继续执行。
在MIDP2.0中,对于Display类进行了很多的增强,主要在两个方面进行了增强:
1、 屏幕的属性
l numAlphaLevels——获得设备对于透明度的支持
可以通过该类获得在List、ChoiceGroup和Alert中能够显示的最大(最佳)图片尺寸,有助于在高级用户界面编程中使用恰当的图片。
l getBestImageHeight——获得设备支持的图片最佳高度
l getBestImageWidth——获得设备支持的图片最佳宽度
l getBorderStyle——获得控件的边界格式
l getColor——获得高级用户界面中的默认颜色
可以获得如下类型的默认颜色
n COLOR_BACKGROUND——背景
n COLOR_FOREGROUND——前景
n COLOR_HIGHLIGHTED_BACKGROUND——高亮时的背景
n COLOR_HIGHLIGHTED_FOREGROUND——高亮时的前景
n COLOR_BORDER——边界
n COLOR_HIGHLIGHTED_BORDER——高亮时的边界
例如获得默认的背景颜色,可以使用如下代码实现:
int bgColor = display.getColor(Display. COLOR_BACKGROUND);
2、 控制设备
l flashBacklight——控制手机背景灯的闪烁
l vibrate——控制手机震动
其他的还有一个很实用的方法,在Form界面中,可以使某个控件获得焦点,可以使用如下方法:
l setCurrentItem——设置某个控件获得焦点,可以接受输入。
以上详细介绍了Display类提供的各个功能,但是在实际使用过程中,还需要有些别的要求。
例如在实际的手机界面程序设计中,为了增强代码的可读性,经常需要将不同的界面封装成不同的类,然后在界面之间按照程序逻辑的要求进行变换,这样就需要使用到Display对象的setCurrent方法进行切换。而创建Display对象时,必须传递一个MIDlet类型的对象,这样大大限制了创建Display对象。
一般在界面类中,因为界面类不是MIDlet的子类,所以需要获得Display对象有两个方法:
1、 传递MIDlet类型的对象
2、 传递Display类型的对象
下面就以传递Display对象为例来实现在界面类中进行切换。下面的程序为了简单起见,以两个Canvas界面为例来演示实际的传递,高级界面和这个使用完全一样。
MIDlet中的代码实现:
Display display;
public MyMIDlet(){
display = Display.getDisplay(this);
//创建需要显示的界面对象
FirstCanvas fc = new FirstCanvas(display);
//显示界面
display.setCurrent(fc);
}
第一个界面类的代码实现:
public class FirstCanvas extends Canvas{
Display display;
public FirstCanvas(Display display){
this.display = display;
}
/**绘制方法*/
public void paint(Graphics g){
g.drawString(“第一个界面”,30,40,Graphics.TOP | Graphics.LEFT);
}
/**事件处理*/
public void keyPressed(int keyCode){
display.setCurrent(new SecondCanvas(display)); //显示下一个界面
}
}
第二个界面类的代码实现和上一个类似:
Display display;
public SecondCanvas(Display display){
this.display = display;
}
这里就不再累述了。
上面的代码演示了如何使用传递Display对象的形式,在界面类中实现切换界面。当然除了该方式以外,需要实现该功能的方式还有很多种,这里只介绍这一种容易理解的实现方式。
以上内容详细介绍了J2ME编程过程中Display类的实际使用,希望能帮助大家快速熟悉该类的实际使用。因为作者水平有限,不足之处难免,希望大家能积极指正!
分享到:
相关推荐
本篇文章将深入探讨如何使用Android原生的`DisplayManager`和`Display`类来实现这一功能。 首先,我们要理解`DisplayManager`和`Display`这两个核心概念。`DisplayManager`是Android提供的一个服务接口,它允许应用...
DisplayPort 1.2是显示接口技术的一种...通过阅读“Display_Port_1.2.pdf”文档,你将深入理解DisplayPort 1.2的详细规范、功能实现和实际应用,对于从事显示开发的专业人士来说,这份资料无疑是不可或缺的参考资料。
在本教程中,我们将深入探讨Display Tag的使用方法和技巧。 首先,我们来了解一下Display Tag的核心标签`<display:table>`。这个标签用于在HTML表格中展示数据集,它可以与任何Java集合或数据源(如List、Set、Map...
本篇将深入探讨四种类型的内部类:成员内部类、局部内部类、匿名内部类和静态内部类,并通过实例来解析它们的定义、实例化和引用方式。 1. **成员内部类**: 成员内部类就像是外部类的成员,可以是私有的或具有...
在深入探讨ANSYS Scade Display之前,我们首先需要理解这个工具的核心价值。ANSYS是全球领先的工程仿真软件供应商,而Scade Display是其产品系列中的一款,专门用于开发高质量、安全关键的人机交互界面(HMI)。这个...
时钟恢复是另一个关键环节,DisplayPort使用自同步时钟,这意味着接收端需要从数据流中恢复出准确的时钟信号。Link Training中的时钟恢复算法能够适应信号的抖动和变化,确保数据采样在正确的时间点进行。 在...
标题 "Display_C++_" 暗示我们正在讨论如何使用C++编程语言来构建一个与Arduino相关的显示应用程序。描述中提到的"Exemple ...通过深入理解和实践这些概念,开发者可以成功地创建出利用C++编程的Arduino显示应用程序。
在本文中,我们将深入探讨如何在C#的WPF(Windows Presentation Foundation)环境中使用Dynamic Data Display(D3)库进行图形绘制。D3是一个强大的数据可视化库,它提供了丰富的功能来帮助开发者创建交互式、可定制...
在提供的压缩包文件 "display-block应用" 中,可能包含了使用 `display:inline-block` 进行布局的示例代码或教程,通过学习和实践这些案例,可以帮助你更好地理解和掌握这一技巧。 总之,`display:inline-block` 是...
本文将深入探讨“华为路由器DISPLAY命令大全”,帮助网络管理员更好地理解和使用这些命令来监控和管理他们的网络设备。 华为路由器的DISPLAY命令是用于获取设备当前状态、配置信息、接口统计以及各种运行日志的关键...
#### 三、深入理解`display inline`的特性 1. **文本流**:使用`display: inline;`之后,元素将被视为文本的一部分,因此会遵循文本流的规则,即元素会按照从左到右的顺序依次排列,并且会在遇到容器边缘或换行符时...
全志H5是一款基于ARM Cortex-A53架构的高性能处理器,常用于开发各种嵌入式设备,如智能电视盒、...开发者需要深入理解硬件特性,遵循Linux和Android的规范,以及注重性能和功耗的优化,才能构建出高效可靠的显示驱动。
DisplayPort 协议是一种开放的数字通信界面标准,广泛应用于PC、显示器、投影仪等设备的内部和外部视频及音频数据传输...无论是研发人员还是工程师,都可以通过深入了解该标准来开发、设计和优化新一代的显示技术产品。
Display Port 1.2是显示接口...无论是硬件设计者还是软件开发者,都需要深入理解这个规范,以确保兼容性和性能。总的来说,Display Port 1.2为现代显示技术设定了新的标准,推动了高清、多屏和节能显示解决方案的发展。
### Display Port V1.2 数据手册关键知识点解析 #### 标题:DISPLAY PORT V1.2 DATASHEET - **DisplayPort v1.2** 是由...通过对该标准的深入理解,可以帮助开发人员更好地利用其特性来优化产品设计和提高用户体验。
然而,要正确地使用友元类,需要对其特性有深入的理解,同时注意合理地设计程序结构以确保代码的清晰性和维护性。本篇文章将通过一个简单的例子来演示友元类的使用,并详细解释其好处、应用场景和使用时应遵守的规则...
本篇将深入探讨这两个技术及其相关规范。 首先,WiFi Display,又称Miracast,是一种允许设备通过无线方式直接连接并显示其内容的技术。它主要应用于手机、平板电脑等设备,可将屏幕内容无线投射到电视或显示器上,...
### Display与Visibility的区别 在网页布局与样式设计中,`display`与`...理解并正确使用`display`和`visibility`对于创建灵活、响应式的网页布局至关重要。希望本文能够帮助读者更好地掌握这两个属性的应用技巧。
SSHConformity是一个基于Spring、Struts和Hibernate的开源项目,它集成了多种标签库,以简化Web开发过程。在SSHConformity中,`display标签`...在深入学习和使用SSHConformity时,理解并熟练运用这些标签是非常重要的。