您当前的位置:首页 > 互联网教程

关于java,paint(); repaint();

发布时间:2025-05-24 20:56:06    发布人:远客网络

关于java,paint(); repaint();

一、关于java,paint(); repaint();

paint是系统回调函数,用户不能主动调用,需要进行重绘时,要使用repaint方法,当用户调用repaint方法后,实际上,系统后台调用了paint方法,所以,你的问题,要画一条直线,或者清除一条直线,那么你的绘制代码或清除代码要写到paint方法中,然后需要绘制或清除的时候,调用repaint方法,就可以了

二、java中repaint()方法到底应该怎么用

java里repaint()是重绘component的方法;\x0d\x0a\x0d\x0arepaint()方法用于重绘组件,该方法有下面四种形式:\x0d\x0a1。public void repaint()\x0d\x0a2。public void repaint(long tm)\x0d\x0a//指定调用update方法之前等待的最大毫秒数tm\x0d\x0a3。public void repaint(int x,int y,int width,int height)\x0d\x0a//重绘组件的指定矩形区域\x0d\x0a4。public void repaint(ling tm,int x,int y,int width,int height)\x0d\x0arepaint方法不总是马上执行,Java虽然会尽可能快的执行repaint,当Applet运行在较慢的平台上或计算机较忙时,应该考虑使用第2或4种repaint方法,指定在多长时间内必须执行repaint,否则就放弃。\x0d\x0a\x0d\x0arepaint()这个方法是一个具有刷新页面效果的方法,如果你要页面进行重画就可以调用.一般都是在AWT的图形绘制当中调用的到.那么该方法具体的工作原来是怎么样的呢?看下面的结构流程图你就可以大概的了解了:\x0d\x0arepaint()方法\x0d\x0a|\x0d\x0a|\x0d\x0aV\x0d\x0aAWT线程--->paint()方法-->图形绘制\x0d\x0a|\x0d\x0a|\x0d\x0aV\x0d\x0aupdate()方法--->paint()方法--图形绘制\x0d\x0a从上面的流程图可以看出,在绘制动画图形时候如果没有调用repaint()方法的时候直接就是由线程调用paint()方法进行绘制,用repaint()进行刷新显示.但是这样的动画会有个缺点(这样的效果绘制出来会有闪烁).想想做出来的动画总是隔一段时间就闪烁,有人会看吗?那么应该怎么去除闪烁呢?我再下面的文章中会讲到.这里主要的是说明repaint()这个方法.\x0d\x0a在调用了repaint()的时候我门可以看出,它并不是直接就去绘制动画(调用paint()),而是通过调用AWT线程在由线程去调用另一个方法update()再由update()调用画笔paint()方法进行绘制.那么这里为什么要多做一步呢?这样是不是为我门多增加代码的书写量呢?回答是当然不会,如果你不调用repaint()那么就不能实现每一次的刷新显示,就只会绘制重叠的图形,不能一张一张的绘制出来.那么其中调用的update()到底是起到什么样的作用呢?\x0d\x0aupdate():清除当前显示并调用paint()方法.当然这个update()方法是可以被修改的,我门在另一篇文章关于"双缓冲技术"中会给大家讲到这点.\x0d\x0a综合上面的介绍可以总结出repaint()的工作原理:repaint()通过调用线程再由线程去调用update()方法清除当前显示并再调用paint()方法进行绘制下一个需要显示的内容.这样就起到了一种图片的交替显示从而在视角上形成了动画.

三、repaint方法

1、在Java中,repaint()方法是一个用于重绘组件的关键函数。当你希望更新组件的外观时,可以调用这个方法。它有多种形式,以满足不同场景的需求。

2、首先,最基础的形式是public void repaint(),它会立即尝试调用组件的paint方法,如果组件是轻量级的。如果组件较重,它会触发update方法的执行。

3、第二种形式是public void repaint(long tm),这里的tm参数表示在调用update方法之前,等待的最大毫秒数。这种方式适用于需要在特定时间范围内重绘的场景,特别是在Applet运行在性能较低的设备时,可以防止过度频繁的重绘导致性能问题。

4、第三和第四种形式分别为public void repaint(int x, int y, int width, int height)和public void repaint(long tm, int x, int y, int width, int height),它们用于重绘组件的特定矩形区域。这种方式更加精确,只更新需要更新的部分,提高了效率。

5、需要注意的是,repaint()方法并非立即执行,Java会尽力快速响应,但在资源紧张时,可能无法立即满足。因此,根据平台性能和应用需求,合理选择使用哪种形式的repaint方法至关重要。