// © 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);	}}