Java中的repaint和paint
Java中的repaint()和paint()有什么区别啊,是怎么用的?
追问:不好意思,只是你说的太专业了,我看不懂,那awt不知道,我只知道,原程序画出的圆是不闪烁的,如果我这个程序把repaint()移在末尾画出的圆就是闪烁的。说简单点吧,不然我不懂。
Java中的repaint()和paint()有什么区别啊,是怎么用的?
追问:不好意思,只是你说的太专业了,我看不懂,那awt不知道,我只知道,原程序画出的圆是不闪烁的,如果我这个程序把repaint()移在末尾画出的圆就是闪烁的。说简单点吧,不然我不懂。
答案:有两点不同:1、repaint有选择的调用update或者paintrepaint() = update或者paint,对于轻量级组件,repaint会调用paint;而对于重量级组件,会调用update。update一般的工作是清屏然后paint。至于为什么repaint度轻量级和重量级的处理有所不同,如果你一定希望知道再追问我。你也可以自己重写update完成自己定制的工作。2、响应方式不一样paint立即响应,而repaint则是发出重绘请求,等待awt线程选择合适的时间进行重绘。这就像,你是一个画家,而你还雇了另外一个画家——awt。有两个方法,完成绘图,第一交给awt线程,但是他什么时候完成绘画完全取决于awt的心情;第二你自己来画,这样更确定,但是你不得不管理许多细节。在非paint方法中,显示的调用任何paint方法,就相当于你自己来画;而repaint就是发出请求交给awt来画。显然我们应该确定究竟谁来画,因为两者交织的画可能带来冲突。比如awt正在绘制的过程中,你的程序乱入,在他绘制一半的图片上涂涂抹抹……。当然java的设计者希望我们把绘制全权交给awt线程来画,而不是自己来画!因为这样最安全和省事。但是我仍然认为在Java游戏编程中还是自己来管理绘制更加灵活。paint是系统回调函数,继承JFrame之后,组建第一次加载会自动调用paint,以后在想掉paint方法的时候要写repaint,repaint会调用paint方法。
至于继承Applet,浏览器在下载字节码的同时,会自动创建一个用户Applet子类的实例,并在适当事件发生时自动调用该实例的几个主要方法:
1.init()
2.start()
3.paint()
4.stop()
5.destory()
所以会出现楼主所描述的那样的现象。。。
把你代码贴上来看看,肯定是你代码的问题,要不不会无法调paint方法的
上一个:求教一个java io程序
下一个:java安装jdk的问题