首页 arrow J2ME开发 arrow 新手上路 arrow 使用指针事件在Canvas上绘画
使用指针事件在Canvas上绘画
Author Author: Wupei | Date Date: 2008-05-11 | View Count View: 3031 | Section & Category J2ME开发 - 新手上路 | Digg Digg: 1
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();
    }
}

更多阅读:

最近更新 ( 2008-11-23 )
 

尚无评论发表

我要发表评论

登录菜单

最新文章

本月热门

订阅本站

RSS 0.91 RSS 1.0 RSS 2.0 ATOM 0.3 OPML