// Spektrum
// Aufruf:
// <applet code = Spektrum.class width=400 height = 500> </applet>

import java.applet.*;
import java.awt.*;

public class Spektrum extends Applet implements Runnable // Task
   {
   int m_start;
   int m_width;
   int m_height;
   Thread m_Spektrum = null;

   public Spektrum()    // Konstruktor
        {
        m_start = 180;  // Startposition
        }

   public void init()   // wird nach dem Objektanlegen gerufen
        {
        m_width = size().width;
        m_height= size().height;
        }

   public synchronized void paint (Graphics g)
      {
        for (int i=1; i <= 6; i++)
        {
        switch (i)
                {
                case 1: g.setColor (Color.red);
                        break;
                case 2: g.setColor (Color.orange);
                        break;
                case 3: g.setColor (Color.yellow);
                        break;
                case 4: g.setColor (Color.green);
                        break;
                case 5: g.setColor (Color.blue);
                        break;
                case 6: g.setColor (Color.magenta);
                        break;
                }
        g.fillArc (0,0,m_width, m_height, m_start, -60);
        m_start -=60;
        m_start %= 360;
        showStatus("Threads: " + m_Spektrum.activeCount());
        }
      }
  public void start ()
    {
    if (m_Spektrum == null)
        {
        m_Spektrum = new Thread (this);
        m_Spektrum.start();
        }
    }

  public void stop()
    {
    if (m_Spektrum != null)
        {
        m_Spektrum.stop();
        m_Spektrum = null;
        }
    }

   private synchronized void moveArc (int m)
        {
        m_start -= m;
        }

public void run ()
  {
    while (true)
    {
      try
      {
      repaint();
      moveArc (5);
      Thread.sleep(30);
      }
      catch (InterruptedException e)
        {
        stop();
        }
    }
  }
public boolean mouseDown(Event evt, int x, int y)
  {
  if (evt.metaDown())
        m_Spektrum.suspend();
  else
        m_Spektrum.resume();
   return true;
   }

public void update (Graphics g)
   {
   paint(g);
   }
}

