使用指针事件在Canvas上绘画

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class Doodle extends MIDlet {
    private Display display; // The display
    private DoodleCanvas canvas; // Canvas
    public Doodle() {
        display = Display.getDisplay(this);
        canvas = new DoodleCanvas(this);
    }

    protected void startApp() {
        display.setCurrent(canvas);
    }

    protected void pauseApp() {}

    protected void destroyApp(boolean unconditional) {}

    public void exitMIDlet() {
        destroyApp(true);
        notifyDestroyed();
    }
}


/*--------------------------------------------------
 * Class DoodleCanvas
 *
 * Pointer event handling
 *-------------------------------------------------*/
class DoodleCanvas extends Canvas implements CommandListener {
    private Command cmExit; // Exit midlet
    private Command cmClear; // Clear display
    private int startx = 0, // Where pointer was clicked
    starty = 0,
    currentx = 0, // Current location
    currenty = 0;
    private Doodle midlet;
    private boolean clearDisplay = false;

    /*--------------------------------------------------
     * Constructor
     *-------------------------------------------------*/
    public DoodleCanvas(Doodle midlet) {
        this.midlet = midlet;
        // Create exit command & listen for events
        cmExit = new Command("Exit", Command.EXIT, 1);
        cmClear = new Command("Clear", Command.SCREEN, 1);
        addCommand(cmExit);
        addCommand(cmClear);
        setCommandListener(this);
    }

    /*--------------------------------------------------
     * Paint the text representing the key code
     *-------------------------------------------------*/
    protected void paint(Graphics g) {
        // Clear the background (to white)
        if (clearDisplay) {
            g.setColor(255, 255, 255);
            g.fillRect(0, 0, getWidth(), getHeight());
            clearDisplay = false;
            startx = currentx = starty = currenty = 0;
            return;
        }
        // Draw with black pen
        g.setColor(0, 0, 0);
        // Draw line
        g.drawLine(startx, starty, currentx, currenty);
        // New starting point is the current position
        startx = currentx;
        starty = currenty;
    }

    /*--------------------------------------------------
     * Command event handling
     *-------------------------------------------------*/
    public void commandAction(Command c, Displayable d) {
        if (c == cmExit) {
            midlet.exitMIDlet();
        } else if (c == cmClear) {
            clearDisplay = true;
            repaint();
        }
    }

    /*--------------------------------------------------
     * Pointer pressed
     *-------------------------------------------------*/
    protected void pointerPressed(int x, int y) {
        startx = x;
        starty = y;
    }

    /*--------------------------------------------------
     * Pointer moved
     *-------------------------------------------------*/
    protected void pointerDragged(int x, int y) {
        currentx = x;
        currenty = y;
        repaint();
    }
}