Java 为什么clearRect()方法不清除画布上的区域?

Java 为什么clearRect()方法不清除画布上的区域?,java,graphics,applet,Java,Graphics,Applet,我编写了一个Java小程序,它在循环的每次迭代中更新后,在画布上的相同位置打印文本。文本值改变,输出正确,但每次打印前我在循环中调用的清除文本区域的方法不起作用,文本被覆盖。我可以看到多达2-3次迭代的输出,但是它不可读。小程序实际执行倒计时并以HH:MM:SS格式显示时间。下面是我的代码。请预测原因和/或纠正: /* Only the section of the code I'm having problems in is included */ while (t>=0) {

我编写了一个Java小程序,它在循环的每次迭代中更新后,在画布上的相同位置打印文本。文本值改变,输出正确,但每次打印前我在循环中调用的清除文本区域的方法不起作用,文本被覆盖。我可以看到多达2-3次迭代的输出,但是它不可读。小程序实际执行倒计时并以HH:MM:SS格式显示时间。下面是我的代码。请预测原因和/或纠正:

/* Only the section of the code I'm having problems in is included */

while (t>=0) {
    //int t stores total time in seconds
    int h=(t/3600);
    int m=((t%3600)/60);
    int s=((t%3600)%60);
    str=h+" : "+m+" : "+s;
    /* String str holds data to be displayed, i.e., time in HH : MM : SS format */
    g.clearRect(20,200,150,30);
    g.drawString(str,20,200);
    try{
        Thread.sleep(1000); //elapses 1 second
    }
    catch(Exception e) {}
    t=t-1;
}

使用带有颜色的drawRect而不是clearRect。就像@ControlAltDel解释的那样。我不确定上面的代码是否位于您的绘画或跑步中。我仍然建议使用runnable方法,而不是在循环中绘制它。类似祝您好运

如果您阅读了clearRect的Javadocs,它会说:“从Java 1.1开始,屏幕外图像的背景色可能取决于系统。应用程序应该使用setColor后跟fillRect,以确保屏幕外图像被清除为特定颜色”。您似乎没有遵守这些说明。@ControlAltDel我没有阅读Javadocs,我真的不知道该说明。我是个新手,没有参加过任何专业课程;我刚买了一本书,自学成才。我从您的评论中了解到可以使用fillRect()方法,但我仍然不了解clearRect()的用法。另外,我也不知道屏幕外的图像。我可以请您说明正确使用clearRect()的语法吗?谢谢,好的。我将首先将颜色设置为默认背景色,即白色,然后使用
g.fillRect(20200150,30)
擦除画布上的该区域。这就是我可以做的,直到我了解更多关于runnable方法的知识,并且可以用另一种方法来做。感谢@ZaidQureshi和@AltControlDel对我的帮助。另外,如果您正在尝试倒计时,请使用(System.currentTimeMillis()+countDownTime)存储结束时间,然后您可以执行
timer=EndTime-System.currentTimeMillis()
要准确显示计时器正在运行,老实说,在使用Runnable之前,您不需要知道太多,只需知道每次调用repaint()时都会调用paint,您可以稍后了解其余的内容。在run方法中使用相同的while循环。您可能可以从我提供的链接中获取模板