import java.awt.*;

public class diagramm
{  private int xAnfang = 20;             //Position auf dem Bildschirm
   private int yAnfang =20;
   private int yHoehe = 200;            //Gesamthöhe des Diagramms
   private int breite =30;              //Breite eines Balkens
   private int luecke =10;              //Abstand zwischen den Balken
   private Color farbe=Color.black;     //Farbe der Balken
   // Konstruktor
   public diagramm(int x, int y, int h,int b, int l,Color f)
   {
     xAnfang=x;
     yAnfang=y;
     breite=b;
     yHoehe=h;
     luecke=l;
     farbe=f;
   }
   // set-Methoden
   public void setFarbe(Color f)
   {
     farbe=f;
   }
   public void setBreite(int b)
   {
     if (b>0)
      breite=b;
   }
   public void setLuecke(int l)
   {
     if (l>=0)
       luecke=l;
   }
   public void setHoehe(int h)
   {
     if (h>0)
       yHoehe=h;
   }
   public void setX(int x)
   {
     if (x>=0)
       xAnfang=x;
   }
   public void setY(int y)
   {
     if (y>=0)
       yAnfang=y;
   }
   
   // Diagramm zeichnen
   public void zeichnen(int[] a,Graphics g)
   { int groessterWert;
     int[] skalierteDaten = new int[a.length]; //zweites Array mit angepassten
                                               //Bildschirmgröße
     groessterWert = sucheGroesstenWert(a);
     skalierteDaten = skaliereWerte(a,groessterWert, yHoehe);
     int x=xAnfang;
     g.clearRect(xAnfang,yAnfang,a.length*(breite+luecke),yHoehe);
     g.setColor(farbe);
     for (int zaehler =0; zaehler<skalierteDaten.length; zaehler++)
     {
       g.fillRect(x, yAnfang+ yHoehe - skalierteDaten[zaehler],
                  breite, skalierteDaten[zaehler]);
       x= x+ breite + luecke;
     }
   }
   
   // Neues Array berechnen, so dass alles im gewünschten Bildschirmbereich
   // Platz hat.
   private int[] skaliereWerte(int[] a, int  max, int h)
   { int[] neueWerte = new int[a.length];
     if (max!=0)
     { for (int i=0; i< a.length; i++)
       {
         neueWerte[i]= a[i]* h / max;
       }
     }
     else
     { for (int i=0; i< a.length; i++)
       {
         neueWerte[i]= a[i];
       }
     }
     return neueWerte;
   }
   
   private int sucheGroesstenWert(int a[])
   { int maxWert = a[0];
     for (int i=1;i<a.length;i++)
     {
       if (a[i]>maxWert)
         maxWert=a[i];
     }
     return maxWert;
   }
}
