没有循环的小应用程序怎么会重复执行paint()方法?

djk2003 2005-11-29 07:16:56
本意是通过通过事件处理改变i的值,结果发现不用改变,这个程序能够自动循环出现三张图片,而且开始换得快,最后换得慢,直至最后不变了。难道paint()会自动调用自己?可是为什么最后又会停止,而且开始和后来频率不一样呢?具体可以观察在控制台输出的i的值,一直在变,想不通!请帮助!
程序代码如下:
import java.awt.*;
import java.applet.*;
public class ImageDemo extends Applet {
Image i1,i2,i3;
int i=1;

public void init() {
i1 = getImage(getCodeBase(), "1.jpg");
i2 = getImage(getCodeBase(), "2.jpg");
i3 = getImage(getCodeBase(), "3.jpg");
i1=i1.getScaledInstance(800,600,i1.SCALE_AREA_AVERAGING);//缩放显示
i2=i2.getScaledInstance(800,600,i2.SCALE_AREA_AVERAGING);
i3=i3.getScaledInstance(800,600,i3.SCALE_AREA_AVERAGING);
}
public void paint(Graphics g)
{
System.out.println(i);
switch(i)
{ case 1:
g.drawImage(i1,20,20,this);
i=i+1; //i增一
break;
case 2:
g.drawImage(i2,20,20,this);
i=i+1; break;
case 3:
g.drawImage(i3,20,20,this);
i=i+1; break;
default:
i=1;
break;
}


}
}
...全文
164 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BabyWhite 2005-11-30
  • 打赏
  • 举报
回复
呵呵,paint函数是会被自动调用的,当界面需要重画时(比如这个Applet初始化时,或被其它窗口遮住后其它窗口又移开时,系统会叫Applet自动重画自己,再次显示在屏幕上,于是,paint()就被调用了)
至于效率变化问题,楼主自己结合当时的实际情况想想吧~^_^
djk2003 2005-11-30
  • 打赏
  • 举报
回复
就这一个,怎么判断出来什么时候重绘?
说好不能打脸 2005-11-29
  • 打赏
  • 举报
回复
这是重绘,在可视化组建发生状态变化时,会自动执行该方法,该方法是专门拿给用户覆盖的
jordan1 2005-11-29
  • 打赏
  • 举报
回复
调用 repaint()
djk2003 2005-11-29
  • 打赏
  • 举报
回复
不是,i不是恒值,而是会自动改变,所以我才困惑。你可以运行一下看看!
ganzi312 2005-11-29
  • 打赏
  • 举报
回复
我不知道我说的是不是一定的对!
你上面定义了一个成员变量赋值了是1!难后在后面的swith()条件为i;i的值应该是恒为1!看看是不是这里的问题!

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧