// © Copyright 1999, Joseph Bergin. All rights reserved. import java.util.Observable; import java.util.Observer; import java.awt.*; import java.awt.event.*; abstract class TemperatureGUI implements Observer { TemperatureGUI(String label, TemperatureModel model, int h, int v) { this.label = label; this.model = model; temperatureFrame = new Frame(label); temperatureFrame.add("North", new Label(label)); temperatureFrame.add("Center", display); Panel buttons = new Panel(); buttons.add(upButton); buttons.add(downButton); temperatureFrame.add("South", buttons); temperatureFrame.addWindowListener(new CloseListener()); model.addObserver(this); temperatureFrame.setSize(200,100); temperatureFrame.setLocation(h, v); temperatureFrame.setVisible(true); } public void setDisplay(String s){ display.setText(s);} public double getDisplay() { double result = 0.0; try { result = Double.valueOf(display.getText()).doubleValue(); } catch (NumberFormatException e){} return result; } public void addDisplayListener(ActionListener a){ display.addActionListener(a);} public void addUpListener(ActionListener a){ upButton.addActionListener(a);} public void addDownListener(ActionListener a){ downButton.addActionListener(a);} protected TemperatureModel model(){return model;} private String label; private TemperatureModel model; private Frame temperatureFrame; private TextField display = new TextField(); private Button upButton = new Button("Raise"); private Button downButton = new Button("Lower"); class CloseListener extends WindowAdapter { public void windowClosing(WindowEvent e) { e.getWindow().setVisible(false); System.exit(0); } } } class CelsiusGUI extends TemperatureGUI { public CelsiusGUI(TemperatureModel model, int h, int v) { super("Celsius Temperature", model, h, v); setDisplay(""+model.getC()); addUpListener(new UpListener()); addDownListener(new DownListener()); addDisplayListener(new DisplayListener()); } public void update(Observable t, Object o) { setDisplay("" + model().getC()); } class UpListener implements ActionListener { public void actionPerformed(ActionEvent e) { model().setC(model().getC() + 1.0); } } class DownListener implements ActionListener { public void actionPerformed(ActionEvent e) { model().setC(model().getC() - 1.0); } } class DisplayListener implements ActionListener { public void actionPerformed(ActionEvent e) { double value = getDisplay(); model().setC(value); } } } class FarenheitGUI extends TemperatureGUI { public FarenheitGUI(TemperatureModel model, int h, int v) { super("Farenheit Temperature", model, h, v); setDisplay(""+model.getF()); addUpListener(new UpListener()); addDownListener(new DownListener()); addDisplayListener(new DisplayListener()); } public void update(Observable t, Object o) { setDisplay("" + model().getF()); } class UpListener implements ActionListener { public void actionPerformed(ActionEvent e) { model().setF(model().getF() + 1.0); } } class DownListener implements ActionListener { public void actionPerformed(ActionEvent e) { model().setF(model().getF() - 1.0); } } class DisplayListener implements ActionListener { public void actionPerformed(ActionEvent e) { double value = getDisplay(); model().setF(value); } } } public class MVCTempConvert { public static void main(String args[]) { TemperatureModel temperature = new TemperatureModel(); new FarenheitGUI(temperature, 100, 100); new CelsiusGUI(temperature,100, 250); } }