![]() |
![]() |
![]() |
![]() |
![]() |
|
Now, with the new table subclass defined in Segment 986, you can create a bare-bones application that displays movie information in a table. The application reuses the data model introduced in Segment 850, and connects the data in that data model to a table by way of a new observer defined in Segment 988. The application and the new observer provide the infrastructure you need to test variations of the table and the table model.
import javax.swing.*;
import javax.swing.table.*;
import java.awt.event.*;
import java.util.*;
public class MovieTableApplication extends JApplet {
// Declare instance variables:
private RatingTable ratingTable;
private MovieData movieData;
// Define constructor
public MovieTableApplication() {
// Create models
getMovieData();
// Create and connect views to application
getContentPane().add("Center", new JScrollPane(getRatingTable()));
}
// Define getters and setters
public MovieData getMovieData () {
if(movieData == null) {
setMovieData(new MovieData());}
return movieData;
}
public void setMovieData (MovieData m) {
movieData = m;
movieData.addObserver(new MovieDataObserverForTable(this));
movieData.changed();
}
public RatingTable getRatingTable () {
if (ratingTable == null) {
Vector rows = new Vector();
Vector columns = new Vector();
// Prepare column labels
columns.add("Title"); columns.add("Rating"); columns.add("Script");
columns.add("Acting"); columns.add("Direction");
// Create and assign new table
setRatingTable(new RatingTable(rows, columns));
}
return ratingTable;
}
public void setRatingTable (RatingTable r) {
ratingTable = r;
}
public static void main (String argv []) {
JFrame frame = new JFrame("Movie Data Table");
frame.getContentPane().add("Center", new MovieTableApplication());
frame.setSize(750, 210);
frame.addWindowListener(new ApplicationClosingWindowListener());
frame.show();
}
}