import java.util.*;
import java.awt.*;
public class MeterCanvas extends Canvas implements Observer{
 Movie movie;                                          
 String title = "Title to be Supplied";
 int minValue = 0, maxValue = 30, value = 15;
 // Set the title:
 public void setTitle(String s) {title = s; repaint();}      
 // Set the current value:
 public void setValue(int v) {value = v; repaint();}
 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;                                 
  setTitle(m.getTitle());                              
  setValue(m.rating());                                
 }                                                     
 public void paint(Graphics g) {
  // Obtain Dimension instance and draw:
  Dimension d = size(); 
  int meterWidth = d.width * 3 / 4;
  int dialPosition = meterWidth * (value - minValue)
                     / (maxValue - minValue);
  int xOrigin = (d.width - meterWidth) / 2; 
  int yOrigin = d.height / 2;
  g.drawLine(xOrigin, yOrigin, xOrigin + meterWidth, yOrigin);
  g.drawLine(xOrigin + dialPosition, yOrigin,
             xOrigin + dialPosition, yOrigin - 10);
  // Write title:
  g.setFont(new Font("Helvetica", Font.BOLD, 12));
  FontMetrics f = g.getFontMetrics();
  int height = f.getHeight();
  int descent = f.getDescent();
  int stringWidth = f.stringWidth(title);
  xOrigin = (d.width - stringWidth) / 2; 
  yOrigin = d.height * 3 / 4;
  g.drawString(title, xOrigin, yOrigin);
 }
 public Dimension minimumSize() {return new Dimension(150, 100);}
 public Dimension preferredSize() {return new Dimension(150, 100);}
}
