import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BouncingBall3 
        extends java.applet.Applet {
  public BouncingBall3() {
    setLayout(new BorderLayout());
    canvas = new BouncingBallCanvas();
    add("Center", canvas); 
    animator = new Animator(canvas); 
    Dimension d; 
    
    controlPanel = new JPanel(); 
    controlPanel.setLayout(new GridLayout(1,0));     
    JButton startButton = new JButton("start");
    controlPanel.add(startButton);
    JButton stopButton = new JButton("stop");
    controlPanel.add(stopButton);
    JComboBox choice = new JComboBox();
    choice.addItem("red");
    choice.addItem("green");
    choice.addItem("blue");
    controlPanel.add(choice); 
    add("South", controlPanel); 
    
    startButton.addActionListener(new ButtonHandler(ButtonHandler.START_ANIMATION)); 
    stopButton.addActionListener(new ButtonHandler(ButtonHandler.STOP_ANIMATION)); 
    choice.addItemListener(new ColorChoiceHandler());
     
  }
   
  public void init() {
    String att = getParameter("delay");
    if (att != null) { 
      int delay = Integer.parseInt(att);
      animator.setDelay(delay); 
    }
    canvas.initCanvas(); 
  }

  public void start() {
	System.err.println("applet start called");
    animator.start(); 
  }

  public void stop() {
	  System.err.println("thread stop called");
	  animator.stop(); 
  }
   
  protected BouncingBallCanvas canvas;
  protected Animator animator; 
  protected JPanel controlPanel; 
  
  protected class ButtonHandler implements ActionListener {  

    static final int START_ANIMATION = 1; 
    static final int STOP_ANIMATION = 2; 
      
    public ButtonHandler(int cmd) {
      this.cmd = cmd;     
    }
       
    public void actionPerformed(ActionEvent event) { 
      switch (cmd) { 
      case START_ANIMATION: start(); break; 
      case STOP_ANIMATION: stop(); break; 
      }
    }

    protected int cmd;
  }

  protected class ColorChoiceHandler implements ItemListener {
    public void itemStateChanged(ItemEvent event)  {    
      JComboBox choice = (JComboBox) event.getSource();  
      if (choice != null) {
        if ("red".equals(event.getItem()))
          canvas.setBallColor(Color.red); 
        else if ("green".equals(event.getItem()))
          canvas.setBallColor(Color.green); 
        else if ("blue".equals(event.getItem()))
          canvas.setBallColor(Color.blue); 
        canvas.repaint();
      }
    }
  }
   
}
