import java.applet.Applet;
import java.awt.*;

/**
    Diese Klasse veranschaulicht den Lebenszyklus
    eines Applets.
*/
public class InitStartStop extends Applet
{   int initCount = 0;    //Zaehler der Aufrufe von init
    int startCount = 0;   //Zaehler der Aufrufe von start
    int stopCount = 0;    //Zaehler der Aufrufe von stop
    int destroyCount = 0; //Zaehler der Aufrufe von destroy

    /**
        Diese Methode zeichnet ein Diagramm mit den aktuellen
        Zustaenden der Zaehler der Applet-Operationen init, start,
        stop, destroy.
    */
    public void paint (Graphics g)
    {   //Vorbereitung: alles weiss;
        //!size wird in Java2 nicht mehr verwendet!
        g.setColor(Color.white);
        g.fillRect(0,0,size().width, size().height);

        //zeichne alle Standardteile der Graphik
        g.setColor(Color.red);
        g.drawLine(120, 20, 120, 220);
        g.drawLine(120,220, 300, 220);
        //Zeichne die Marken
        g.setColor(Color.gray);
        g.drawString("Init Count", 5, 50);
        g.drawString("Start Count", 5, 100);
        g.drawString("Stop Count", 5, 150);
        g.drawString("Destroy Count", 5, 200);
        //Zeichne das Raster
        g.setColor(Color.lightGray);
        for(int x = 120+25; x<300; x+= 25)
        {   g.drawLine(x, 20, x, 199);
        }
        //Zeichne die Eintraege der Zustaende
        g.setColor(Color.black);
        g.fillRect(120,30,initCount * 25, 40);
        g.fillRect(120,80,startCount * 25, 40);
        g.fillRect(120,130,stopCount * 25, 40);
        g.fillRect(120,180,destroyCount * 25, 40);
    }
    /**
        Diese Methode redefiniert die gleichnamige Methode
        von Applet und ruft nur paint auf.
    */
    public void update(Graphics g)
    {   paint(g);
    }
    /**
        Diese Methode wird einmal ausgefuehrt,
        wenn das Applet geladen wird.
    */
    public void init()
    {   initCount++;
        System.out.println("init");
        repaint();
    }
    /**
        Diese Methode wird nach init aufgerufen und ausserdem,
        wenn das Applet gestoppt und wieder gestartet wird.
        Die Methode wird jedesmal aufgerufen, wenn ein HTML-
        Dokument des Applets auf dem Bildschirm dargestellt wird.
    */
    public void start()
    {   startCount++;
        System.out.println("start");
        repaint();
    }
    /**
        Diese Methode wird aufgerufen,
        wenn der Browser das HTML-Dokument mit dem Applet verlaesst.
    */
    public void stop()
    {   stopCount++;
        System.out.println("stop");
        repaint();
    }
    /**
        Diese Methode wird aufgerufen,
        wenn die Umgebung (z.B. der Browser) das Applet
        aus dem Speicher loescht.
    */
    public void destroy()
    {   destroyCount++;
        System.out.println("destroy");
        repaint();
    }
}


