import javax.swing.*; import java.awt.*; import java.awt.image.*; import java.awt.event.*; public class DoubleBuffer extends JPanel { BufferedImage offScreenImg; public static void main(String[] args) { DoubleBuffer cbi = new DoubleBuffer(); JFrame f = new JFrame("DoubleBuffer"); f.setContentPane(cbi); f.setSize(200, 200); f.setVisible(true); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); //createImage returns null if the Component does not appear on the screen. cbi.createImage(); cbi.repaint(); } public void createImage() { while (offScreenImg == null) { //Create an off-creen image to use as a double buffer. offScreenImg = (BufferedImage)createImage(100, 100); System.out.println(offScreenImg); } Graphics2D g2 = offScreenImg.createGraphics(); //Complete the image off-screeen. g2.setColor(Color.blue); g2.fillRect(0, 0, 100, 100); g2.drawImage(new ImageIcon("Dining.gif").getImage(), 20, 20, this); } public void paintComponent(Graphics g) { super.paintComponent(g); //Show the off-screen image. g.drawImage(offScreenImg, 50, 50, this); } }