2011-11-01 65 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