There are many ways to implement double buffering. One way is to not do it and instead use Swing components, such as JFrame and JPanel, that already does double buffering. Use paintComponent(Graphics) and override it the same way as you would with paint(Graphics).
class JPanelWithSmileyFace extends JPanel {Example paintComponent.
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.YELLOW);
g.fillOval(10, 10, 180, 180);
g.setColor(Color.BLACK);
g.fillOval(90-30, 50, 20, 30);
g.fillOval(90+30, 50, 20, 30);
g.drawArc(40, 40, 200-2*40, 200-2*40, -10, -160);
}
}
public class SmileyFaceDemo {Example main.
public static void main(String[] args) {
JFrame window = new JFrame();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(new JPanelWithOval());
window.pack();
window.setVisible(true);
}
}