Home Segments Top Top Previous Next

792: Mainline

Having defined a new observer and a new listener, you can adjust the definition of the MovieApplication class accordingly, making it simpler.

Note that both the observer constructor and the listener constructor now require the application instance to be handed over as an argument:

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;
  meter.addMouseListener(new MeterListener(this));              
 }
 public void setMovie (Movie m) {
  if(movie == m) {return;}
  if(movie instanceof Movie) {movie.deleteObservers();}
  if(m instanceof Movie) {
   movie = m;
   movie.addObserver(new MovieObserver(this));                  
   movie.changed(); 
 }} 
 // Define window adapter        
 private class LocalWindowListener extends WindowAdapter { 
  public void windowClosing(WindowEvent e) { 
   System.exit(0); return; 
}}}