Técnica del doble buffer

JGJLa técnica del doble buffer proporciona la mejor solución para el problema de las animaciones, aunque requiere una programación algo más complicada. La idea básica del doble buffer es realizar los dibujos en una imagen invisible, distinta de la que se está viendo en la pantalla, y hacerla visible cuando se ha terminado de dibujar, de forma que aparezca instantáneamente.

Para crear el segundo buffer o imagen invisible hay que crear un objeto de la clase Image del mismo tamaño que la imagen que se está viendo y crear un contexto gráfico u objeto de la clase Graphics que permita dibujar sobre la imagen invisible. Esto se hace con las sentencias,

Image imgInv;
Graphics graphInv;
Dimension dimInv;
Dimension d = size(); // se obtiene la dimensión del panel

en la clase que controle el dibujo (por ejemplo en una clase que derive de Panel). En el método update() se modifica el código de modo que primero se dibuje en la imagen invisible y luego ésta se haga visible:

public void update (Graphics.g) {
// se comprueba si existe el objeto invisible y si sus dimensiones son correctas
if ((graphInv==null) || (d.width!=dimInv.width) || (d.height!=dimInv.height)) { dimInv = d;
// se llama al método createImage de la clase Component imgInv = createImage(d.width, d.height);
// se llama al método getGraphics de la clase Image graphInv = imgInv.getGraphics();
}
// se establecen las propiedades del contexto gráfico invisible,
// y se dibuja sobre él graphInv.setColor(getBackground());

// finalmente se hace visible la imagen invisible a partir del punto (0, 0)
// utilizando el propio panel como ImageObserver
g.drawImage(imgInv, 0, 0, this); }
// fin del método update()

Los gráficos y las animaciones son particularmente útiles en las applets. El Tutorial de Sun tiene un ejemplo (un applet) completamente explicado y desarrollado sobre las animaciones y los distintos métodos de eliminar el flicker o parpadeo.

Fuente: Aprenda Java como si estuviera en primero de la Universidad de Navarra