首页 > 代码库 > AWT的双缓存技术
AWT的双缓存技术
学了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); } } ); } }实现效果如下图。
AWT的双缓存技术
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。