Olhe o tutorial do java2D. Tinha lido um texto muito bom a respeito. Não sei se foi na JavaMagazine ou alguma pagina na internet. Qd chegar em casa vou dar uma olhada se acho para voce.
O problema: Canvas nao eh Swing… e eu extendo nossa belissima java.awt.Canvas… .se fosse Swing ja teria o double buffering automaticamente…
Implementar o DB eu sei, o problema eh nao querer implementar ele E nao querer usar mais herancao do que ja existe no swing/awt para facilitar o processo
Canvas tem o método public void createBufferStrategy(int numBuffers)
Se não servir talvez haja outro modo de fazer:
Com swing quase todos os componentes tem double buffering ON por default. Se você tivesse um componente do tipo JPanel ou JComponent poderia usar o método setDoubleBuffered(true ou false). Mas isto não é seu caso.
Quando a gente quer dominar o double buffering de forma global (como na impressão por exemplo) a gente usa a classe javax.swing.RepaintManager
(This class manages repaint requests, allowing the number of repaints to be minimized, for example by collapsing multiple requests into a single repaint for members of a component tree. )
Ela tem o seguinte método:
static RepaintManager currentManager(Component c)
Return the RepaintManager for the calling thread given a Component.
Canvas não é swing mas é um Component. Então talvez se possa fazer:
RepaintManager currentManager = RepaintManager.currentManager( seuCanvas);
currentManager.setDoubleBufferingEnabled(true);