import javax.microedition.lcdui.*;
public class MyCanvas extends Canvas {
public void paint(Graphics g) {
g.setColor(255, 0, 0);
g.fillRect(0, 0, getWidth(), getHeight( ));
g.setColor(255, 255, 255);
g.drawString("Hello World!", 0, 0, g.TOP g.LEFT);
}
}
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MyMidlet extends MIDlet {
public MyMidlet( ) {}
public void startApp( ) {
Canvas canvas = new MyCanvas( );
Display display = Display.getDisplay(this);
display.setCurrent(canvas);
}
public void pauseApp( ) {}
public void destroyApp(boolean unconditional) {}
}
图1.在Canvas上绘制"Hello World!"
1. 绘图
坐标(0,0)代表了显示屏的左上角。X坐标的值是从左向右递增的,Y坐标的值是从顶向下递增的。应用程序应该一直检查绘图区的大小,这可以通过如下的类Canvas提供的方法实现:public int getHeight( );
public int getWidth( );
这两个方法分别以像素值返回可显示区的高度和宽度。
所用的绘图模型是像素替换法--用在graphics对象中指定的当前像素值来代替目标像素值。一个24位的色彩模型由红,绿,蓝各8位(RGB)来提供。然而,由于并非所有的设备都支持彩色,应用程序中要求的颜色将被映射到设备中可用的颜色值上。但是,一个良好的应用程序,应该检查一个设备是否支持彩色-这可以用Display类的方法isColor()和numColors( )来完成。
Graphics类提供了方法setColor()和getColor( )来设置和取得颜色。但是,不象AWT/Swing,不存在方法setBackground( )和setForeground(),所以你必须显式地调用fillRect( )(见示例5-1)。Graphics类的大多数的另外一些方法是自解释的,与该类的AWT版本中的方法差不多。但是,我们还是要仔细地看一下其中的几个在环境J2ME下是如何工作的。
2. 双缓冲
双缓冲机制经常用来实现动画的平滑显示效果。在这种技术中,你不是在显示屏上绘图,而是绘制到显示屏的一个拷贝上(一个脱屏的缓冲区)-它是内存的一部分。当缓冲区绘制结束,你就可以把缓冲区内容拷贝到显示屏上。这里的基本原理是,直接拷贝内存内容到显示屏上要快于用原型绘制的速度。
要实现双缓冲,可以先生成一个其尺寸与屏幕一样的易变图像: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( )方法来检查是否图形是双缓冲方式实现的。
class TestCanvas extends Canvas implements Runnable {
void doSomething( ) {
//代码段1
callSerially(this);
}
public void run( ) {
//代码段2
}
}
STYLE_PLAIN STYLE_UNDERLINED
SIZE_SMALL SIZE_MEDIUM
FACE_SYSTEM FACE_MONOSPACE
Font font = Font.getFont(FACE_SYSTEM,STYLE_PLAIN, SIZE_MEDIUM);
图2.在设备显示屏上画出系统字体
新闻热点
疑难解答