主要演示在画布中处理command的事件。
在MiracleCanvas中,通过他的构造函数把MiracleMIDlet的示例传入,以便在command事件中控制退出。
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

 public class MiracleMIDlet extends MIDlet...{

Display display;
MiracleCanvas mCanvas;
 public MiracleMIDlet()...{
 if(mCanvas==null)...{
mCanvas = new MiracleCanvas(this);
}
}
 public void startApp()...{
display = Display.getDisplay(this);
display.setCurrent(mCanvas);
}
 public void pauseApp()...{
}
 public void destroyApp(boolean uncondition)...{
}
}
import javax.microedition.lcdui.*;
 public class MiracleCanvas extends Canvas implements Runnable, CommandListener...{

MiracleMIDlet mMIDlet;
Thread t;
int width,height;
boolean draw=false;
private Command drawCommand = new Command("画字",Command.OK, 1);
private Command exitCommand = new Command("退出", Command.EXIT,0);
 public MiracleCanvas(MiracleMIDlet mMIDlet)...{
this.mMIDlet = mMIDlet;
width = getWidth();
height = getHeight();
setFullScreenMode(true);
addCommand(drawCommand);
addCommand(exitCommand);
setCommandListener(this);
t = new Thread(this);
t.start();
}
 public void run()...{
 while(true)...{
repaint();
 try...{
Thread.sleep(500);
 }catch(Exception e)...{
}
}
}
 public void paint(Graphics g)...{
g.setColor(0);
g.fillRect(0,0,width,height);
g.setColor(-1);
g.drawString("Miracle", 64,64,20);
 if(draw)...{
g.setColor(0xFF00FF);
g.drawString("drawing...", 64, 100,20);
}
}
 public void commandAction(Command c, Displayable s)...{
 if(c==drawCommand)...{
draw = !draw;
}
 if(c==exitCommand)...{
mMIDlet.destroyApp(true);
mMIDlet.notifyDestroyed();
}
}

} |