完整程序如下,其中注释部分都是疑问。如果谁可以按注释方式全部详细解答,我将增加100分奖赏。如果可以帮我解出其中一问,只给一分。二问二分。所有都解答,分全给。另有100分奖励。不好意思,我有点急于知道,就只好先这样了。
//以下是完整程序
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class BallTest4 extends MIDlet implements CommandListener {
Display display;
BallCanvas canvas;
private Command exitCommand = new Command( "Exit ", Command.EXIT, 1);
public BallTest4() {
display = Display.getDisplay(this);
canvas = new BallCanvas(display);
canvas.addCommand(exitCommand); //这里的canvas是指类BallCanvas,它并不是一个容器,如Form但为什么也可以有addCommand()方法?
canvas.setCommandListener(this); //同上,为什么可以设置命令监听器
}
public void startApp() {
canvas.start();
}
public void destroyApp(boolean bl) {
canvas.destroy();//这一行好像根本没用。因为没有用notifyDestroyed()
}
public void pauseApp(){}
public void commandAction(Command c, Displayable s) {
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
public class BallCanvas extends Canvas implements Runnable{
int posX=5, posY=5; //这里好像声明一下就行,没必要赋初值吧
int ballSize = 10;
Display display; //奇怪,这里直接用Display来声明一个display而不是用Display.getDisplay(this);一时间难以理解
public BallCanvas(Display display){
super();//这里的super()到底调用的是谁?是BallCanvas吗?请详谈一下。谢过。
this.display=display;//这一行也不是用Display.getDisplay(this)一时间难以理解。对不起我确实有点弱智。不过搞搞ME不是没有一点可能性的。
}
public void run() {
while (true){//这里的while(true)到底是干嘛呀,它是指?
this.posX = 20;
this.posY = 50;
try {
Thread.sleep(100);
} catch (InterruptedException e) {}
repaint();
}
}
void start() {
display.setCurrent(this); //这里的this不知道什么意思
Thread t = new Thread(this);//这里的this又代表谁呢?
t.start();
repaint();//这里为什么要用重绘。不用行吗?它起什么用?
}
void destroy() {
}
protected void paint(Graphics g) {
int x = g.getClipX();
int y = g.getClipY();
int w = g.getClipWidth();
int h = g.getClipHeight();
g.setColor(0xffffff); //这一行设置的是背景颜色吗?有必要吗?
g.fillRect(x, y, w, h); //这里一定要绘制矩形吗?它到底起什么用?对于这个程序。
g.setColor(200);
g.fillArc(posX, posY, ballSize, ballSize, 0, 360);//这里换用g.drawArc()行吗?用g.fillArc()有什么好处?
}
}
}
------解决方案--------------------------------------------------------
1.请参api
http://java.sun.com/javame/reference/apis/jsr037/javax/microedition/lcdui/package-summary
这里的Command是这个包特别定义的, 这个程序貌似和awt没有联系, 因为没有import java.awt.*;
2.int posX=5, posY=5; //这里好像声明一下就行,没必要赋初值吧
赋初值是一个好习惯
3.Display display; //奇怪,这里直接用Display来声明一个display而不是用Display.getDisplay(this);一时间难以理解
如lz所说, 这是一个声明, 所以不必getDisplay了
4.super();//这里的super()到底调用的是谁?是BallCanvas吗?请详谈一下。谢过。