2011-07-28 5 views
0

中間イメージに問題があります。画像は1回だけ表示されます。私は画像を移動した後、 "ライン"はもう表示されません。中間イメージ

public void paintLine(Graphics g) { 
    if (line == null) { 
     line = new BufferedImage(1, height, BufferedImage.TYPE_INT_ARGB); 

     Graphics gImg = line.getGraphics(); 
     float[] data = datas[index]; 
     for (float f : data) { 
      float[] rgb = ColorMap.getPixelColor(f); 
      gImg.setColor(new Color(rgb[0], rgb[1], rgb[2])); 
      gImg.drawRect(0, (int)yPos--, 1, 1); 
     } 
     gImg.dispose(); 
    } 
    xIncr++; 
    g.drawImage(line, (int)xPos - xIncr, (int)yPos, null); 
    graph.repaint(); 
} 

このメソッドは、JPanelのpaintComponentで呼び出されます。 毎回イメージ「行」を作成すると、実際にはパフォーマンスが低下して正しく表示されています。

+0

より明確であると思います)。 –

+0

あなたが述べた問題に何も言えませんが、そのままコードには問題があります:ペイントサイクルで再描画を呼び出すように見えるため、誤って致命的ではないループが生成されます... – kleopatra

+0

はい再描画するには、メソッドから削除して、中間イメージの問題を修正しました。問題はforループ、drawRectメソッドのyPosにありました。今はうまくいきます。 – wotan2009

答えて

0

Emm ...あなたの質問で情報が少なくてすみますが、おそらくdoubleBuffered(false)オプションのために画像が消える場合があります。したがって、キャンバスの場合、ダブルバッファリングされたオプションを手動でtrueに設定する必要があります。この

public class MyLabel extends JLabel{ 


public MyLabel() 
{ 

this.setDoubleBuffered(true); 

} 

public void paintComponent(Graphics g) 
{ 
    this.paintLine(g); 
} 

public void paintLine(Graphics g) { 
    if (line == null) { 
     line = new BufferedImage(1, height, BufferedImage.TYPE_INT_ARGB); 

     Graphics gImg = line.getGraphics(); 
     float[] data = datas[index]; 
     for (float f : data) { 
      float[] rgb = ColorMap.getPixelColor(f); 
      gImg.setColor(new Color(rgb[0], rgb[1], rgb[2])); 
      gImg.drawRect(0, (int)yPos--, 1, 1); 
     } 
     //gImg.dispose(); 
    } 
    xIncr++; 
    g.drawImage(line, (int)xPos - xIncr, (int)yPos, null); 
    graph.repaint(); 
} 
} 

のようなコードの何かが今、私は[SSCCE](http://pscode.org/sscce.htmlを投稿し、概念が早いほど良いのヘルプについては幸運

関連する問題