desenvolvimento, java

Double Buffer em Java

Sobrescrever o método update do componente que irá renderizar a imagem. Do contrário ele sempre irá chamar o método clearRect herdado de Container, que irá produzir o efeito de “flick” ao limpar a tela.

@Override
public void update(Graphics g) {
    paint(g); // não limpa a tela: apenas rechama o método paint
}

Desenhar no objeto graphics de uma imagem offscreen tudo que será renderizado. Só então copiar esta imagem pronta para a saída padrão do componente:

@Override
public void paint(Graphics g) {
    Image offscreen = createImage(width, height); 
    Graphics backBuffer = offscreen.getGraphics(); 
        
    backBuffer.clearRect(0, 0, width, height); 

    // desenhos feitos por este método
    backBuffer.drawString...
    backBuffer.drawRect...
    backBuffer.drawOval...
    backBuffer.drawLine...
    backBuffer.drawImage...

    // desenhos feitos por objetos complementares
    meuObjeto.paint(backBuffer);

    // copia todo o desenho para a tela
    g.drawImage(offscreen, 0, 0, this);
}

Quando quiser atualizar a tela, basta chamar repaint normalmente.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s