import java.util.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
public class TextView extends JPanel implements Observer { //*1 Interface class
/**
* The Model (Account) we are observing
*/
private Model model; //*2 We know model, but not vice versa
/**
* Our widget that we need to remember
*/
private JTextField textField;
public TextView (Model model) {
// Stash arg
this.model = model; //*2
// Sign us up as Observer
model.addObserver (this); //*3 We are Observer of our model
// Set up our JPanel
setBorder (new TitledBorder ("View"));
// Label
add (new JLabel ("Balance:"));
// Text field to display amount
textField = new JTextField (10);
textField.setEditable (false);
add (textField);
// Force an initial update(), args are ignored anyway
update (null, null);
}
/**
* This will be called by our Model
*/
public void update (Observable observable, Object object) { //*4 Catch update
textField.setText (String.valueOf (model.getBalance ())); //*5 Then query model for data
}
}