2011-11-01 3 views
1

J'ai un problème suivant. Je veux dessiner des lignes sur BufferedImage, mais elles n'apparaissent pas. Si je ne charge pas l'image, ils montreront. Quel est le problème? Voici mon code:drawLine ne trace pas ligne sur BufferedImage

@Override 
    public void paintComponent(Graphics g) { 
     prepareImage(); 
     g.drawImage(buffer, 0, 0, null); 
     g.dispose(); 
    } 
    private void prepareImage() { 
     Graphics g = buffer.createGraphics(); 
     g.drawImage(mapImage, 0, 0, null); 
     g.setColor(Color.RED); 
     for (Line line : lines) 
      g.drawLine(line.x1, line.y1, line.x2, line.y2); 
     lines.clear(); 
     g.dispose(); 
    } 

Merci pour votre aide.

+0

Pour une meilleure aide plus rapidement, postez un [SSCCE] (http://sscce.org/). Pour un SSCCE qui utilise des images, reliez-les à chaud ou générez-les en code. –

+0

En outre, cela ressemble à lorsque vous dessinez l'image "tampon" au-dessus de l'image "lignes". – camickr

Répondre

5

Je vois deux problèmes dans votre code:

  1. Vous ne devriez pas appellerez g.dispose() dans paintComponent
  2. Puisque vous videz la collection des lignes, la prochaine fois paintComponent est appelé (et vous n'ont aucun contrôle sur cela), aucune ligne ne sera tracée.
+0

Le g.dispose() doit être utilisé. Il dispose l'objet Graphics renvoyé par la méthode createGraphics(). Il ne dispose pas l'objet Grpahics transmis à la méthode paintComponent(). – camickr

+0

Vous parlez de celui de la prepareImage alors que je parlais de celui de la peintureComponent –

+2

Désolé, vous étiez parfaitement clair à ce sujet, Je ne sais pas ce que je pensais. – camickr