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?
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.
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á.