黑马程序员技术交流社区

标题: 关于paint、update、repaint方法的一些疑问 [打印本页]

作者: 张冉冉    时间: 2012-4-24 19:27
标题: 关于paint、update、repaint方法的一些疑问
本帖最后由 张冉冉 于 2012-4-26 14:39 编辑

repaint方法会调用update方法,update方法默认调用paint方法,调用完update方法后repaint方法不会继续调用paint方法吧?轻量级组件和重量级组件分别有哪些,希望能多举几个例子,然后repaint方法在轻量级组件和重量级组件上调用有什么区别?
作者: 周海诚    时间: 2012-4-24 19:44
repaint() - update() - paint()一般在程序中我们都会重装paint()方法以执行重绘画面的动作,但实际上除了paint()以后,update()也执行了一部分的工作,这部分工作包括用默认的背景颜色填充,设置前景色等,由于这部分一般都无须用户参考,所以一般都update()自动完成,然后update()再调用paint()执行用户自定义的绘制操作.
一般情况不用重写update()方法。但是如果你填充背景的颜色跟paint()中的颜色不一样的时候就会有闪烁感。可以重写update方法,事实上,在用双缓冲画图时,一般都会选择重装update()而不是paint()方法,由于在执行paint()方法之前,update()还执行填充背景的动作,所以当重绘的速度很大时,填充背景的动作将很明显,也即闪烁很大,也将,如果在paint()中用双缓冲的话实际上起不了效果.而如果用update()的话就可以双缓冲达到预期的效果.    当在程序中需要重绘操作时,我们一般会用repaint()而不是直接调用update()或者paint(),repaint()将调用update().而在各种awt,swing组件需要自动重新绘制时,程序也一般也会自动调用repaint()方法

对于轻量级组件,一般是重写 paint 方法以快速的绘制组件,但是对于重量及组件,由于重新绘制时间长,容易产生闪烁的现象,所以一般是采用重写 update 方法,利用双缓冲图片来解决闪烁的问题。

转自novelly的博客详细可自行查询




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2