import java.awt.*;
import java.util.*;
class FormPanel extends Panel implements Observer {
 Movie movie = null;                                    
 TextField scriptField = new TextField("0", 20);
 TextField actingField = new TextField("0", 20);
 TextField directingField = new TextField("0", 20);
 Button scriptPlus = new Button("+");                   
 Button actingPlus = new Button("+");                   
 Button directingPlus = new Button("+");                
 Button scriptMinus = new Button("-");                  
 Button actingMinus = new Button("-");                  
 Button directingMinus = new Button("-");               
 FormPanel () {
  setLayout(new GridLayout (3, 4, 3, 3));
  add(new Label ("Script"));    add(scriptField);
  add(scriptMinus);             add(scriptPlus);        
  add(new Label ("Acting"));    add(actingField);
  add(actingMinus);             add(actingPlus);        
  add(new Label ("Directing")); add(directingField);
  add(directingMinus);          add(directingPlus);     
 }
 public void attachObservable (Movie m) {
  if (m != movie) {
   if (movie != null) {movie.deleteObserver(this);}
   movie = m;
   movie.addObserver(this);
   movie.changed();
  }
 }
 public void update (Observable o, Object x) {
  Movie m = (Movie) o;
  scriptField.setText(String.valueOf(m.script));
  actingField.setText(String.valueOf(m.acting));
  directingField.setText(String.valueOf(m.directing));
 }
 public boolean action(Event e, Object o) {
  if (movie == null) {return false;}
  if (e.target == scriptField) {                                
   movie.setScript(Integer.parseInt((String) o)); return true;  
  } else if (e.target == actingField) {                         
   movie.setActing(Integer.parseInt((String) o)); return true;  
  } else if (e.target == directingField) {                      
   movie.setDirecting(Integer.parseInt((String) o)); return true;
  } else if (e.target == scriptPlus) {                          
   movie.setScript(movie.getScript() + 1); return true;         
  } else if (e.target == actingPlus) {                          
   movie.setActing(movie.getActing() + 1); return true;         
  } else if (e.target == directingPlus) {                       
   movie.setDirecting(movie.getDirecting() + 1); return true;   
  } else if (e.target == scriptMinus) {                         
   movie.setScript(movie.getScript() - 1); return true;         
  } else if (e.target == actingMinus) {                         
   movie.setActing(movie.getActing() - 1); return true;         
  } else if (e.target == directingMinus) {                      
   movie.setDirecting(movie.getDirecting() - 1); return true;   
  } else {return false;}                                        
 }
 public Dimension minimumSize() {return new Dimension(300, 75);}
 public Dimension preferredSize() {return new Dimension(300, 75);}
}
