覆盖repaint方法,使用自己的清屏方式另外建议考虑使用OpenGL

解决方案 »

  1.   

    这里可以不用双缓冲,楼主的问题主要是没有屏蔽AWT的自动清屏(相当耗时)
      

  2.   

    http://www.chinaitlab.com/www/news/article_show.asp?id=178791、通过覆盖public void update(Graphics g)来消除闪烁!   在动画的实现中,经常
    repaint()是通过两个步骤
    ,其次再调用paint(Graphc
    的程序,如果下一桢图象可
    烁: 
     用到repaint()函数来重画屏幕
    来实现刷新功能的,首先它调用
    is g)来重画屏幕,这就容易造
    以完全覆盖上一桢图象的话,便 ,实现动画的加载,其实在java中
    public void update()来刷新屏幕
    成闪烁,特别是一些需要重画背景
    可以重写update函数如下来消除闪 
      public void update(G
     raphics g){ paint(g) }
     
     
      同样调用repaint()重画屏幕。或者直接重写不调用repaint,而用       Graphics g=getGraphics();                               paint(g);来实现重画屏幕。                                             2、 通过双缓存消除闪烁?   为了防止屏幕重画出现
    小程序屏幕上去。下面是站
     的闪烁,先创建一个屏外绘图区
    长创建动态广告板时用到的双缓
     ,重画完毕,直接将成品再绘制到
    存技术代码: 
     
      offScreenImage=createImage(w,h);
     //创建屏外绘图区
     
      offScreen=offScreenImage.getGrap
     hics();//取得绘图环境
       offScreen.setFont(ne
     w Font("Serif",Font.PLAIN,14
     ));
     
      offScreen.drawString("You Are We
     lcome!",4,getBounds().height/2);
     
      }                                                                             
      else{                                                                     
      offScreen.setColor(bgClr);                           
      offScreen.fillRect(0,0,w,h);                       
      offScreen.setColor(fgClr);                          
      for(int i=j;i < j+16;i++){                       
      offScreen.drawString
     (strs[i],0,y+=wordvspace);
     
     
      }                                                                             
      y=y-16*wordvspace;                                           
      }                                                                             
      g.drawImage(offScree
     nImage,0,0,this);//绘制屏外
     成品到小程序中