import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.awt.swing.*;
import java.awt.swing.event.*;
public class FormPanel extends JPanel implements Observer {
 Movie movie = null;                                    
 JTextField scriptField = new JTextField("0", 20);
 JTextField actingField = new JTextField("0", 20);
 JTextField directingField = new JTextField("0", 20);
 JButton scriptPlus = new JButton("+");                   
 JButton actingPlus = new JButton("+");                   
 JButton directingPlus = new JButton("+");                
 JButton scriptMinus = new JButton("-");                  
 JButton actingMinus = new JButton("-");                  
 JButton directingMinus = new JButton("-");               
 FormPanel () {
  setLayout(new GridLayout (3, 4, 3, 3));
  add(new JLabel ("Script"));    add(scriptField);
  add(scriptMinus);             add(scriptPlus);        
  add(new JLabel ("Acting"));    add(actingField);
  add(actingMinus);             add(actingPlus);        
  add(new JLabel ("Directing")); add(directingField);
  add(directingMinus);          add(directingPlus);     
  scriptField.addActionListener(new LocalActionListener());
  actingField.addActionListener(new LocalActionListener());
  directingField.addActionListener(new LocalActionListener());
  scriptPlus.addActionListener(new LocalActionListener());     
  scriptMinus.addActionListener(new LocalActionListener());    
  actingPlus.addActionListener(new LocalActionListener());     
  actingMinus.addActionListener(new LocalActionListener());    
  directingPlus.addActionListener(new LocalActionListener());  
  directingMinus.addActionListener(new LocalActionListener()); 
 }
 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) {
  scriptField.setText(String.valueOf(movie.getScript()));
  actingField.setText(String.valueOf(movie.getActing()));
  directingField.setText(String.valueOf(movie.getDirecting()));
 }
 class LocalActionListener implements ActionListener {
  public void actionPerformed(ActionEvent e) {
   if (movie == null) {return;}
   if (e.getSource() == scriptField) {                                
    movie.setScript(Integer.parseInt(e.getActionCommand())); return;  
   } else if (e.getSource() == actingField) {                         
    movie.setActing(Integer.parseInt(e.getActionCommand())); return;  
   } else if (e.getSource() == directingField) {                      
    movie.setDirecting(Integer.parseInt(e.getActionCommand())); return;
   } else if (e.getSource() == scriptPlus) {               
    movie.setScript(movie.getScript() + 1); return;        
   } else if (e.getSource() == actingPlus) {               
    movie.setActing(movie.getActing() + 1); return;        
   } else if (e.getSource() == directingPlus) {            
    movie.setDirecting(movie.getDirecting() + 1); return;  
   } else if (e.getSource() == scriptMinus) {              
    movie.setScript(movie.getScript() - 1); return;        
   } else if (e.getSource() == actingMinus) {              
    movie.setActing(movie.getActing() - 1); return;        
   } else if (e.getSource() == directingMinus) {           
    movie.setDirecting(movie.getDirecting() - 1); return;  
   } else {return;}  
  } 
 } 
 public Dimension getMinimumSize() {return new Dimension(300, 75);}
 public Dimension getPreferredSize() {return new Dimension(300, 75);}
}
