读书人

高手们来看看:一个画小球简单程序的N

发布时间: 2012-01-22 22:38:43 作者: rapoo

高手们来看看:一个画小球简单程序的N多疑问<先县尝70分,全部解答出来者再补100分>
完整程序如下,其中注释部分都是疑问。如果谁可以按注释方式全部详细解答,我将增加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.html

这里的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吗?请详谈一下。谢过。


super是调用父类的构造器, 这里就是调用Canvas()

5.this.display=display;//这一行也不是用Display.getDisplay(this)一时间难以理解。对不起我确实有点弱智。不过搞搞ME不是没有一点可能性的。

对不起, 你需要加强下基础

6.while (true)
理论上说是无限循环

7. 余下, 基础问题, 无聊。


读书人网 >J2ME开发

热点推荐