科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Java手机软件图形界面API之低级GUI组件

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在高级API编程时,你不能控制显示在屏幕上的内容。然而,一些如游戏类的应用程序可能需要对屏幕绘制有更多的控制。MIDP javax.microedition.lcdui包也提供了处理这类编程的低级API。

作者:朱先忠编译 来源:天极网 2007年11月22日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
 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( )方法来分别检索该字体的字面,大小和字形信息。

  让我们再看一个例子:示例3中代码子类化Canvas 类。在此,绘图颜色设置为白色,并用该色画出一个矩形,然后把绘图色置为黑色。代码剩下的部分在设备屏幕上绘制系统字体,如图2所示。


图2.在设备显示屏上画出系统字体

  示例3:使用字体

import javax.microedition.lcdui.*;
public class FontCanvas extends Canvas {
 public void paint(Graphics g) {
  g.setColor(0xffffff);
  g.fillRect(0, 0, getWidth(), getHeight( ));
  g.setColor(0x000000);
  g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,Font.SIZE_LARGE));
  g.drawString("System Font", 0, 0, g.LEFT | g.TOP);
  g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,Font.SIZE_MEDIUM));
  g.drawString("Medium Size", 0, 15, g.LEFT | g.TOP);
  g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD,Font.SIZE_MEDIUM));
  g.drawString("Bold Style", 0, 30, g.LEFT | g.TOP);
  g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC,Font.SIZE_MEDIUM));
  g.drawString("Italic Style", 0, 45, g.LEFT | g.TOP);
  g.setFont(Font.getFont(Font.FACE_SYSTEM,Font.STYLE_UNDERLINED, Font.SIZE_MEDIUM));
  g.drawString("Underlined Style", 0, 60, g.LEFT | g.TOP);
 }
}

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class FontMidlet extends MIDlet {
 public FontMidlet( ) {}
 public void startApp( ) {
  Canvas canvas = new FontCanvas( );
  Display display = Display.getDisplay(this);
  display.setCurrent(canvas);
 }
 public void pauseApp( ) {}
 public void destroyApp(boolean unconditional) {}
}

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章