快速业务通道

Java手机软件图形界面API之低级GUI组件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
来实现动画的平滑显示效果。在这种技术中,你不是在显示屏上绘图,而是绘制到显示屏的一个拷贝上(一个脱屏的缓冲区)-它是内存的一部分。当缓冲区绘制结束,你就可以把缓冲区内容拷贝到显示屏上。这里的基本原理是,直接拷贝内存内容到显示屏上要快于用原型绘制的速度。

要实现双缓冲,可以先生成一个其尺寸与屏幕一样的易变图像:

int width = getWidth( ); int height = getHeight( ); Image buffer = Image.createImage(width, height);

然后,取得缓冲区的图形上下文:

Graphics gc = buffer.getGraphics( );

现在,你可以在缓冲区中绘图了:

// animate // .. gc.drawRect(20, 20, 25, 30);

当需要把缓冲区拷贝到屏幕上时,你可以重载方法paint( )来把缓冲区内容绘制到设备显示屏上:

public void paint(Graphics g) {  g.drawImage(buffer, 0, 0, 0); }

注意,一些MIDP实现中已经采用了双缓冲机制,因此这里的工作可能是不必要的。你可以使用Canvas的isDoubleBuffered( )方法来检查是否图形是双缓冲方式实现的。

Java手机软件图形界面API之低级GUI组件(3)

时间:2012-01-03

3. 线程问题

MIDP GUI API是线程安全的。即是说,GUI API方法可以在任何时候从任何线程中调用。唯一的例外是Canvas类的serviceRepaints( )方法,它立即调用了paint( )方法以强迫显示的立即重绘。这是说,如果paint( )方法想在任何的应用程序调用serviceRepaints( )时已锁定的对象上同步,应用程序将会产生死锁。为了避免死锁,在使用了serviceRepaints( )方法时,请不要锁定将被paint()方法使用的对象。

另外,在所有未执行的重绘满足后,你可以使用Display类的方法callSerially( )来执行代码,如下所示:

class TestCanvas extends Canvas implements Runnable {  void doSomething( ) {   //代码段1   callSerially(this);  }  public void run( ) {   //代码段2  } }

在此,对象的run( )方法在初始化结束后被调用。

4. 字体

应用程序不能自己产生字体。代之的是,应用程序应该要求基于一些属性(如大小,字体名称,字形)的一种字体,底层系统将试着返回一种与要求的字体最相近的字体。Font 类用来描述各种字体和尺寸。在Font 类中一共定义了三种字体属性,每一种属性取值不同,如下:

属性 取值
Face MONOSPACE, PROPORTIONAL, SYSTEM
Size SMALL, MEDIUM, LARGE
Style BOLD, ITALIC, PLAIN, UNDERLINED

例如,要指定一种中等大小的字体,可以使用Font.SIZE_MEDIUM;用Font.STYLE_ITALIC来指定倾斜字形,等等。字形属性值可以用OR(|)操作符结合;另外一些属性值不能结合。例如:下面这种属性值指定了一种常规,带下划线的字体:

STYLE_PLAIN | STYLE_UNDERLINED

而,下面是非法的组合:

SIZE_SMALL | SIZE_MEDIUM

下面也是非法的:

FACE_SYSTEM | FACE_MONOSPACE

系统中的每种字体实际上都是分别实现的,所以为了取得描述字体的对象,可以用getFont( )方法--该方法有三个参数,分别对应字体的字面,大小和字形。如,下面的代码以指定的字面,大小和字形属性得到一个Font对象:

Font font = Font.getFont(FACE_SYSTEM,STYLE_PLAIN, SIZE_MEDIUM);

如果没有相匹配的字体,系统将尽可能提供最相近的匹配-总是一个有效的字体对象。

一旦得到一种字体,你就可以使用Font类的方法来检索这种字体的信息。如,你可以用getFace(),getSize( )和getStyle( )方法来分别检索该字体的字面,大小和字形信息。

Java手机软件图形界面API之低级

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号