Pintura - Canvas ou JPanel?

Em vários exemplos de Java2D na internet, os desenvolvedores usam o JPanel como componente para pintar gráficos. Noto também, porém com menos frequência, o uso do Canvas, que é parte da AWT.

Canvas parece ser feito propriamente para isso: pintura personalizada. A documentação do JPanel o descreve apenas como um container genérico.

A questão é: qual é mais apropriado para pintura pura? É boa prática misturar componentes AWT e Swing na mesma aplicação?

Canvas tem alguns métodos para multi-buffering, especialmente útil para aplicativos que trabalham em tela cheia. JPanel é double buffered por padrão, Canvas não. Pode haver melhorias de desempenho em uma implementação manual de double buffering?

[size=10]edit: pintagem >_<[/size]

Para “pintagem” eu não sei. Mas para “pintura”, você deve um usar filho de JComponent.
Faça a sobrescrita do seu JPanel só se você quiser um container.

E é uma péssima idéia misturar AWT e Swing. Os componentes da AWT são heavy-height e sempre ficarão sobre os componentes do Swing.

Não há como obter desempenho melhor numa implementação manual.

O double buffering do Swing usa a classe BufferStrategy, que por sua vez consegue comunicar-se com a placa de vídeo. Isso garante que além de double buffering haja, quando possível, page flipping. E isso garante sincronismo vertical e a ausência de tearing.

Para jogos ou aplicações mais dinâmicas, faça a sobrescrita do JFrame diretamente, como explica o meu site:
Ponto V! - Desenho direto, Active Rendering.

Já tinha visto seu site, e estava lendo seus artigos, são ótimos!

Obrigado!

Opa, obrigado. A sessão de java está meio parada pq estou bem sem tempo, e por hora estou migrando o conteúdo do site antigo. Mas logo devo reestabelecer o trabalho por lá.