Canvas是一个抽象类进行Low-level编程需要实现一个Canvas的子类并且重载Canvas的抽象方法paint()
protected abstract void paint(Graphics g)
在paint()中可以对传递来的Graphics对象进行操作如使用Graphsics对象的getWidth()和getHeight()获得有效的绘制区setGrayScale()和setColor()方法对灰度和颜色经行控制drawLine()方法进行画线drawRect()和fillRect()方法绘制并填充矩形drawString()绘制文本等等当实作好了Canvas的子类之后由于Canvas也是Displayable类的子类所以使用Display的setCurrent()方法就可以在屏幕上显示该Canvas
示例2-2给出一个简单的使用了Canvas的MIDlet该程序在Canvas上显示2行文本
示例2-2一个简单的Canvas程序
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
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.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN,
Font.SIZE_LARGE));
g.drawString("It's a Canvas!", 5, 20, g.TOP | g.LEFT);
//g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD|Font.STYLE_ITALIC ,
Font.SIZE_MEDIUM));
g.drawString("Wu_Yiding", 35, 50, g.TOP | g.LEFT);
}
}
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) {
}
}
该程序的运行结果如图2-20左图所示如果把程序中关于字体设置的两行的注释去掉则setFont()方法会对文本的字体做进一步的调整结果如图2-20右图所示
www.j2mehome.com