2011-03-19 3 views
0

막대 그래프를 그리기 위해이 작업을 수행했습니다. 그러나 repaint() 작업을 수행하면 새 차트가 이전 작업의 위에 그려집니다. 새로운 배열을 가진 약간의 repaints 후에 그것은 this처럼 보입니다. 그려진 막대를 지우거나 제거하려면 어떻게해야합니까?그래픽에 의해 그려진 사각형 제거/지우기 # fillRect()

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JPanel; 

public class BarChart extends JPanel { 

    private int[] array; 

    public BarChart(int[] array) { 
     this.array = array; 
    } 

    public int[] getArray() { 
     return array; 
    } 

    public void setArray(int[] array) { 
     this.array = array; 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     //Determine longest bar 
     int max = Integer.MIN_VALUE; 
     for (Integer value : array) { 
      max = Math.max(max, value); 
     } 
     //Paint bars 
     int width = (getWidth()/array.length) - 2; 
     int x = 1; 
     for (Integer value : array) { 
      int height = (int) ((getHeight() - 5) * ((double) value/max)); 
      g.setColor(Color.blue); 
      g.fillRect(x, getHeight() - height, width, height); 
      g.setColor(Color.black); 
      g.drawRect(x, getHeight() - height, width, height); 
      x += (width + 2); 
     } 
    } 

} 

답변

2

어쩌면 당신은 당신의 paintComponent() 방법에

g.clearRect(0, 0, getWidth(), getHeight()); 

제일 먼저 호출 할 수 있습니다. 패널이 (그들은 보통 기본적으로 있습니다) 불투명 한 경우

+0

Billiant합니다. 고맙습니다. –

2

, 당신은 배경 색상으로 구성 요소를 채우기 위해이 작업을 수행 할 수 있습니다

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    // Your code here 
} 
관련 문제