Acho que o Fernando não entendeu como é que se desenha alguma coisa em Java 2D. Normalmente você não pega diretamente o contexto de um outro componente e desenha nele, como você fez - isso é uma coisa muito frágil porque qualquer redimensionamento ou sobreposição que ocorrer irá destruir uma parte do seu desenho. Em vez disso, há duas coisas que se podem fazer:
a) O modo de “desenhar uma lista de Shapes”, que requer que você tenha uma lista (ou outra estrutura de dados mais complexa) dos objetos a serem desenhados, funciona assim: você cria uma classe derivada de JPanel cujo método paintComponent pega essa lista e desenha, Shape por Shape, os objetos a serem desenhados. Isso funciona bem se você quer ter algo que é basicamente orientado a figuras (não é um “Microsoft Paint” da vida, e sim um mini-Corel Draw). e onde seja fácil redimensionar, girar etc. as figuras. Para redesenhar a sua tela, você chama o método repaint da sua classe derivada de JPanel - o repaint irá chamar o paintComponent eventualmente.
b) O modo de “desenhar sobre uma BufferedImage” requer que você crie uma classe derivada de JPanel cujo método paintComponent pega um BufferedImage (que você deve ter criado antes) e a desenha na tela. Então, quando você quer desenhar algo nesse BufferedImage, você simplesmente pega o objeto Graphics2D associado a essa BufferedImage e desenha o que você quer; para transferir o BufferedImage para a tela, você chama o método repaint da sua classe derivada de JPanel - o repaint irá chamar o paintComponent eventualmente. Isso é mais adequado para você fazer um “Paint” mas tem um probleminha, como você deve ter descoberto: não é fácil você redimensionar, girar etc. as figuras porque você não está trabalhando com figuras, e sim com pontos 
Para mais detalhes é melhor ver os artigos do ViniGodoy no PontoV.
http://pontov.com.br/site/