// This example is from the book Developing Java Beans by Robert Englander.
// Copyright (c) 1997 O'Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or implied.
// Chapter 11 -- The VisualTemperature class
package BeansBook.Simulator;
import java.beans.*;
import java.awt.*;
// the temperature bean class definition
public class VisualTemperature extends Panel
implements TemperaturePulseListener, // listends for temperature pulses
java.io.Serializable // declare Serializable
{
// support object for bound property listeners
protected PropertyChangeSupport boundSupport;
// the current temperature
protected double theTemperature = 22.0;
// constructor
public VisualTemperature()
{
// construct the support object
boundSupport = new PropertyChangeSupport(this);
}
// add a property change listener
public void addPropertyChangeListener(PropertyChangeListener l)
{
// defer to the support object
boundSupport.addPropertyChangeListener(l);
}
// remove a property change listener
public void removePropertyChangeListener(PropertyChangeListener l)
{
// defer to the support object
boundSupport.removePropertyChangeListener(l);
}
// get the value of the Temperature property
public double getTemperature()
{
return theTemperature;
}
// set the value of the Temperature property
public void setTemperature(double t)
{
// don't bother if the value didn't change
if (t == theTemperature)
{
return;
}
// save the old value
Double old = new Double(theTemperature);
// save the new value
theTemperature = t;
// fire the property change event
boundSupport.firePropertyChange("Temperature", old, new Double(t));
}
// handle a temperature pulse event
public void temperaturePulse(TemperaturePulseEvent evt)
{
// get the pulse temperature
double p = evt.getPulseTemperature();
// get the current temp
double c = getTemperature();
// if the pulse temperature is greater than the current temperature
if (p > c)
{
// only change if the difference is more than 1
if ((p - c) >= 1.0)
{
// add 1 to the current temperature
setTemperature(c + 1.0);
}
}
else if (p < c) // pulse less than the current temperature
{
// only change if the difference is more than 1
if ((c - p) >= 1.0)
{
// subtract 1 from the current temperature
setTemperature(c - 1.0);
}
}
}
// take a temperature pulse by a direct method call
public void directTemperaturePulse(double pulse)
{
// emulate a regular temperature pulse
temperaturePulse(new TemperaturePulseEvent(null, pulse));
}
}
|