import java.awt.event.*; import java.util.Observable;
/** * Concrete implementation of the View/Controller panel. Implements the * Observer interface (so the View can observe changes to the Model), and * registers 3 controller: 2 buttons that allow the user to increment or * decrement the temp respectively, and the TextField that allows user to * enter an arbitrary temp into the data model. */ public class FahrenheitPanel extends TemperaturePanel { /** * Construct a new FahrenheitPanel instance. Initializes * display with the current state of data model, and * prepares Controller objects for use. */ public FahrenheitPanel(TemperatureModel model) { super("Fahrenheit Temperature",model); setDisplay(""+model.getF()); // initialize the TF w/ the current state of the data mdoel // register listener objects // that will implement // Controller functionality addRaiseListener(new RaiseListener()); addLowerListener(new LowerListener()); addDisplayListener(new DisplayListener()); } /** * Implements the java.util.Observer interface. This method * is invoked by the model whenever its state changes and it * notifies Observers (Views) of the state change. * *
Here, the method merely updates the view rendered * in the TextField window displayed to the user. * * @param t model * @param o argument */ public void update(Observable t, Object o) { setDisplay(""+model().getF()); // <-- MVC method } /** * Listener object that is linked to the "Raise" button * during the construction of Panel object. Implements * Controller functionality - allows the user to "raise" * the temperature of the data model by 1 degree. */ class RaiseListener implements ActionListener { public void actionPerformed(ActionEvent e) { model().setF(model().getF()+1.0); // <-- MVC method } } /** * Listener object that is linked to the "Lower" button * during the construction of Panel object. Implements * Controller functionality - allows the user to "lower" * the temperature of the data model by 1 degree. */ class LowerListener implements ActionListener { public void actionPerformed(ActionEvent e) { model().setF(model().getF()-1.0); // <-- MVC method } } /** * Listener object that is linked to the "display" TextField * during the construction of the Panel object. Implements * Controller functionality - allows the user to assign an * arbitrary temperature to the data model. */ class DisplayListener implements ActionListener { public void actionPerformed(ActionEvent e) { double value = getDisplay(); model().setF(value); // <-- MVC method, update the data model } } }