Como eliminar o flicker de applets ou aplicações?
A eliminação do flicker em applets e aplicações pode ser obtida através de uma estratégia bastante simples: ao invés de realizar o trabalho de renderização diretamente no contexto gráfico recebido pela applet ou aplicação (tipicamente no método paint), efetua-se a renderização numa imagem offscreen (em memória) transferindo-a de uma só vez através do método update, que usualmente não é sobreposto (overrided) pelas applets e aplicações. Esta estratégia elimina completamente o flicker.
Sua implementação em aplicações existentes é bastante simples:
private Image offScreenImage; private Dimension offScreenSize; private Graphics offScreenGraphics;
public final synchronized void update (Graphics g) { Dimension d = getSize(); if((offScreenImage == null) || (d.width != offScreenSize.width) || (d.height != offScreenSize.height)) { offScreenImage = createImage(d.width, d.height); offScreenSize = d; offScreenGraphics = offScreenImage.getGraphics(); } offScreenGraphics.clearRect(0, 0, d.width, d.height); paint(offScreenGraphics); g.drawImage(offScreenImage, 0, 0, null); }
Outra forma de realizar esta tarefa é implementar a renderização diretamente no método update mas sempre efetuando-a na imagem offscreen.