import java.awt.*;
import javax.swing.JPanel;
import java.awt.event.*;

public class BarChart extends JPanel
{
  /**Sample data, and data names*/
  private double[] data = {200, 140, 100, 60, 40};
  private String[] dataName = {"CS", "Math", "Chem", "Biol", "Phys"};
  private Color[] colors = {Color.red, Color.yellow, Color.green,
    Color.blue, Color.cyan, Color.magenta, Color.orange, Color.pink,
    Color.darkGray};

  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);

    if (data == null) return;

    // Find the maximum value in the data
    double max = data[0];
    for (int i=1; i<data.length; i++)
      max = Math.max(max, data[i]);

    int barWidth = (int)((getWidth() - 20.0)/data.length - 10);
    int maxBarHeight = getHeight() - 30;

    g.drawLine(5, getHeight()-10, getWidth()-5, getHeight()-10);

    int x = 15;
    for (int i=0; i<data.length; i++)
    {
      g.setColor(colors[i%colors.length]);
      int newHeight = (int)(maxBarHeight*data[i]/max);
      int y = getHeight()-10-newHeight;
      g.fillRect(x, y, barWidth, newHeight);
      g.setColor(Color.black);
      // Display name if exist
      if ((dataName != null) && (i < dataName.length))
        g.drawString(dataName[i], x, y - 7);
      x += barWidth + 10;
    }
  }

  /**Set data*/
  public void setData(double[] newData)
  {
    data = newData;
    repaint();
  }

  /**Set data names*/
  public void setDataName(String[] newDataName)
  {
    dataName = newDataName;
    repaint();
  }
}