Home Segments Top Top Previous Next

777: Mainline

With the new locally defined observer and modified setter installed, you have the following definition of MovieApplication.

import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class MovieApplication extends JFrame {
 public static void main (String argv []) {
  new MovieApplication("Movie Application");
 }
 // Declare instance variables:
 private Meter meter;
 private Movie movie;
 // Define constructor
 public MovieApplication(String title) {
  super(title);
  // Create model
  getMovie();
  // Create and connect view to application
  getContentPane().add("Center", getMeter());
  // Connect window listener, size and show
  addWindowListener(new LocalWindowListener());
  setSize(300, 100); show();
 }
 // Define getters and setters
 public Meter getMeter () {
  if (meter == null) {setMeter(new Meter(0, 30));}
  return meter;
 }
 public Movie getMovie () {
  if(movie == null) {setMovie(new Movie (10, 10, 10, "On to Java"));}
  return movie;
 }
 public void setMeter (Meter m) {meter = m;}
 public void setMovie (Movie m) {                               
  if(movie == m) {return;}                                      
  if(movie instanceof Movie) {movie.deleteObservers();}         
  if(m instanceof Movie) {                                      
   movie = m;                                                   
   movie.addObserver(new LocalMovieObserver());                 
   movie.changed();                                             
 }}                                                             
 // Define observer:
 private class LocalMovieObserver implements Observer {         
  public void update (Observable observable, Object object) {   
   getMeter().setValue(getMovie().rating());                    
   getMeter().setTitle(getMovie().getTitle());                  
 }}                                                             
// Define window adapter as in Segment 772 
}