import java.awt.*; class OffBuffer { private LightContainer container; private Image work, back; private Dimension offSize; public OffBuffer (LightContainer container) { this.container = container; } public Image getWork() { return work;} public Image getBack() { return back;} public Graphics getWorkGraphics() { return work.getGraphics(); } public Graphics getBackGraphics() { return back.getGraphics(); } public void blitWork() { blitWork(null); } public void blitBack() { blitBack(null); } public void blitWork( Rectangle clip ) { Graphics screen = container.getGraphics(); if (clip != null) screen.setClip(clip); screen.drawImage(work, 0,0, container); screen.dispose(); } public void blitBack( Rectangle clip ) { Graphics work = getWorkGraphics(); if (clip != null) work.setClip( clip ); work.drawImage(back, 0,0, container); work.dispose(); } public void update(){ if (stillValid()) createBuffer();} public boolean stillValid() { Dimension size = container.getSize(); return (work == null || size.width != offSize.width || size.height != offSize.height); } public void createBuffer() { offSize = container.getSize(); work = createOffImage(offSize); back = createOffImage(offSize); } public Image createOffImage(Dimension size) { Image image = container.createImage(size.width, size.height); Graphics g = image.getGraphics(); g.dispose(); return image; } }