Удалить / очистить прямоугольники, нарисованные Graphics # fillRect () - PullRequest
0 голосов
/ 19 марта 2011

Я сделал это для рисования гистограмм, но когда я перерисовываю (), новая диаграмма рисуется поверх предыдущей. После нескольких перерисовок с новыми массивами это выглядит как this . Как очистить или удалить нарисованные столбики? ​​

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 ]

3 голосов
/ 19 марта 2011

Если панель непрозрачна (обычно это по умолчанию), вы можете сделать это, чтобы залить компонент цветом фона:

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    // Your code here
}
2 голосов
/ 19 марта 2011

возможно, вы можете позвонить

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

первым делом в вашем paintComponent() методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...