我的本意是写个测试程序,程序结果显示屏幕上出现一个移动的小黑格子,结果小黑格经过的地方都出现了黑色(参见我上传的图片)。程序代码如下,请教高手为什么会出现这种情况。
import java.awt.*;
class move1 extends Frame{
int locationX=20,locationY=20; //方块的其始坐标
Canvas mycanvas=new Canvas();
move1(){ //构造函数
this.add(mycanvas);
this.setSize(300,300);
this.setVisible(true);
}
public void paint(Graphics g){ //绘图并使之移动
g=mycanvas.getGraphics();
g.setColor(Color.black);
g.fillRect(locationX++,locationY++,10,10);
try
{
Thread.sleep(100);
}
catch(InterruptedException e){}
repaint();
}
public static void main (String[] args) {
new move1();
}
}
----------------解决方案--------------------------------------------------------
首先你的代码就不太好,哪有在paint里面调用repaint的,那岂不是无限循环,永远返回不了
你应该起个线程去repaint
另外,你不想看到那个黑点,你就在paint方法最开始调用super.paint(g);
不过,不推荐在JFrame里面直接画,最好是在JPanel上画,然后重写paintComponent方法
----------------解决方案--------------------------------------------------------
汗……图片超过512K不能上传。有心帮忙的朋友请自己编译一下代码就可以看见我描述的现象了。
----------------解决方案--------------------------------------------------------
首先你的代码就不太好,哪有在paint里面调用repaint的,那岂不是无限循环,永远返回不了
你应该起个线程去repaint
另外,你不想看到那个黑点,你就在paint方法最开始调用super.paint(g);
不过,不推荐在JFrame里面直接画,最好是在JPanel上画,然后重写paintComponent方法
另外,你不想看到那个黑点,你就在paint方法最开始调用super.paint(g);
受教了。不过不大明白这话。
----------------解决方案--------------------------------------------------------
父类的paint负责清除当前的画布
所以你每次画都是新的
----------------解决方案--------------------------------------------------------
楼主与JavaEye的longrm是同一个人?
这个帖里面我已经给出解释了:http://www.javaeye.com/topic/91674
----------------解决方案--------------------------------------------------------
longrm是谁不知道,但这家伙不仅问问题的方式和我差不多,连写的程序都差不多,长见识了.
----------------解决方案--------------------------------------------------------
恩恩,看了你的回答,很不错.
----------------解决方案--------------------------------------------------------