[摘录]关于Java中的paint,r…

来源:互联网 发布:萧技网络电视台 编辑:程序博客网 时间:2024/05/18 12:42
原文地址:[摘录]关于Java中的paint,repaint,update三个方法的关系作者:jx23

repaint,update和paint
这三个方法在Component中定义,由于awt,swing组件都直接或间接继承自Component,所以几乎所有的awt,swing组件都有这三个方法.这三个方法主要是用于组件的界面绘制.
这三个方法执行顺序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()方法.

 

 下列就是本人今天做了欢迎介面时遇到的种种困难和错误,希望放在这里能让大家引以为鉴,不要再犯这样的错误!

 1、不理解paint()方法、repaint()方法、update()方法的区别;

 解决思路:paint()方法是由系统自动随机调用,而update()方法是我们自己人为调用,paint()方法必须要人为指定是什么时候让系统开始调用,但是首先在最开始的时候自己调用一次,所以不安全,我们一般使用update()方法,此方法必须用repaint()方法调用。我们调用paint()方法其实也是由paint()方法调用update()方法(注:paint()方法在加图之前必须判断内存里面是否有图片);

 2、程序执行顺序问题:this.memoryImage()!=null;

 解决思路:虚拟机是先加载属性文件;

 3、路径错误;

 解决思路:src是源文件,不要和它混在一起,我们要用到其它如图片和音乐的文件要放在一个文件夹下面,且此文件夹是和src同一级别;

 4、找不到图片;

 解决思路:图片都必须是在媒体跟踪器跟踪完之后才能加载,才能找到其的宽和高,不能在媒体跟踪器加载完之前调用图片的宽和高;

 5、图片覆盖;

 解决思路:图片在画进屏幕的时候要有一定的顺序问题,背景放在最下面,一层一层往上放,要不然会发生覆盖问题;

 6、图片不能显示;

 解决思路:我们的图片画在屏幕上但前题是我们要有一个窗体才能画,所以在将内存的图画进屏幕的时候必须将窗体可见性设出:setVisible(true);

 7、未找到图片的问题判断:

 解决思路:如果没有找到图片,那么那个图片点whith及点height打印出来都是-1;