2011-11-01 28 views
1

我有一个以下问题。我想通过BufferedImage绘制线条,但它们不显示。如果我不加载图像,他们会显示。问题是什么?这里是我的代码:drawLine不会画线超过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(); 
    } 

感谢您的帮助。

+0

为了更快得到更好的帮助,请发布[SSCCE](http://sscce.org/)。对于使用图像的SSCCE,可以热链接到它们或使用代码生成它们。 –

+0

此外,它看起来像当您在“线条图像”顶部绘制“缓冲区”图像时。 – camickr

回答

5

我看到你的代码的两个问题:

  1. 你不应该的paintComponent
  2. 被调用g.dispose()因为你清除行集合,下一次的paintComponent被称为(和你没有控制),不会画线。
+0

应该使用g.dispose()。它处理从createGraphics()方法返回的Graphics对象。它不会配置传递给paintComponent()方法的Grpahics对象。 – camickr

+0

你正在谈论prepareImage中的一个,而我正在谈论paintComponent中的那个 –

+2

对不起,你在哪里清楚地说明了这一点,不知道我在想什么。 – camickr