Applet e double buffering

Uma vez li em algum lugar que a partir da versao 1.x do java (x <= 4), tudo que extendia de JFrame ja vinha com double buffering automatico…

Pois o double buffering deveria manter o que pintei mesmo apos um ALT+TAB no windows, por exemplo.

O problema eh que tenho um Canvas muito trabalhoso: http://www.linux.ime.usp.br/~gas/iniciacao/parte1.html e desenhar esse canvas nao eh tao rapido.

Existe mesmo algo como setDoubleBuffering(true) (ja tentei coisas parecidas) ou o jeito eh implementar o mesmo na memoria?

Abraco

Guilherme Silveira

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.

perfeito

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 :slight_smile: E nao querer usar mais herancao do que ja existe no swing/awt para facilitar o processo

Sugestao? Se achar o artigo, da um toque

Obrigado

Olá

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);

[]s
Luca

Hmmmm,… vou tentar as duas solucoes (mas ja tentei o primeiro faz tempo, sem muito sucesso)

Obrigadao