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 }