/*--------------------------------------------------
* Doodle.java
*
* Use pointer events to draw onto the Canvas
*
* Example from the book: Core J2ME Technology
* Copyright John W. Muchow http://www.CoreJ2ME.com
* You may use/modify for any non-commercial purpose
*-------------------------------------------------*/
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();
}
}
|