AWT的双缓冲技术

来源:互联网 发布:国安大数据 编辑:程序博客网 时间:2024/06/05 01:54

学了AWT,学到双缓冲技术,于是照着书将双缓存技术的代码给实现了。

另外插一句,swing组件的JComponent组件默认缓冲区,不必自己写代码。如果想关闭双缓冲区,可以在组件上施加setDoubleBuffered(false)

import java.awt.*;import java.awt.event.*;/* * 双缓存技术 * 可以将绘制的内容保留在一个Image对象中,如果需要重新显示绘制的内容,仅仅简单地将这个Image内容再现就可以了。 * (1)img起到缓存的作用,og在其上进行绘制 * (2)createImage必须在MyCanvas显示后才能调用,所以mc.init()放在f.setVisible(true)后 * (3)当窗口缩小,移动等情况发生后,只针对img进行绘制操作,不再对每个细节进行绘制 */class MyCanvas extends Canvas{private Image img;private Graphics og;public void init(){Dimension d=getSize();img=createImage(d.width,d.height);og=img.getGraphics();og.setColor(Color.blue);og.fillRect(30, 30, 60, 60);og.setColor(Color.yellow);og.fillOval(15,15,30,30);og.setXORMode(Color.red);og.fillOval(75, 75, 30, 30);og.setPaintMode();og.setColor(Color.green);og.fillArc(150, 40, 60, 60, 30, 160);}public void paint(Graphics g){if(img!=null){g.drawImage(img, 20, 20, this);}}}public class DoubleBufferDemo {public static void main(String args[]){Frame f=new Frame("DoubleBufferDemo");f.setBounds(100,100,250,200);MyCanvas mc=new MyCanvas();f.add(mc);f.setVisible(true);mc.init();mc.repaint();f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}}
实现效果如下图。



0 0
原创粉丝点击