import java.beans.*; public class Thermometer implements PropertyChangeListener{ // Einschraenkung der Werte protected double minTemp = 18.0; protected double maxTemp = 30.0; final static double MIN = 10; final static double MAX = 35; // die aktuelle Temperatur protected Temperatur aktTemp; protected VetoableChangeSupport constraintHandler; public Thermometer(){ this(25.0); } public Thermometer(double temperatur){ aktTemp = new Temperatur(temperatur); constraintHandler = new VetoableChangeSupport(this); } // implementierung des PropertyChangeListener interfaces public void propertyChange(PropertyChangeEvent evt){ // hier muesste noch implementiert werden } // implementierung des VetoableChangesupport public void addVetoableChangeListener(VetoableChangeListener l){ // weiterreichen an den Handler constraintHandler.addVetoableChangeListener(l); } public void removeVetoableChangeListener(VetoableChangeListener l){ // weiterreichen an den Handler constraintHandler.removeVetoableChangeListener(l); } // Zugriffsmethoden für die min und max Werte public double getMinimumTemperatur(){ return minTemp; } public double getMaximumTemperatur(){ return maxTemp; } public void setMinimumTemperatur(double value) throws PropertyVetoException{ // intern einmal testen, ob der neue Wert // ok ist und ggf. veto ausloesen if (value>MAX || value<MIN ){ throw new PropertyVetoException("Wert liegt ausserhalb des zulaessigen Bereiches(10-35)", new PropertyChangeEvent(this,"MinimumTemperature", new Double(minTemp), new Double(value))); } // ansonsten weiterreichen an Haendler (extern) constraintHandler.fireVetoableChange("MinimumTemperatur", new Double(minTemp), new Double(value)); // wenn keine Exception fliegt geht die Aenderung in Ordnung minTemp = value; } public void setMaximumTemperatur(double value) throws PropertyVetoException{ // intern testen, ob der neue Wert ok ist und ggf. veto ausloesen if (value>MAX || value<MIN ){ throw new PropertyVetoException("Wert liegt ausserhalb des zulaessigen Bereiches(10-35)", new PropertyChangeEvent(this,"MinimumTemperature", new Double(minTemp), new Double(value))); } // ansonsten weiterreichen an Haendler constraintHandler.fireVetoableChange("MaximumTemperatur", new Double(maxTemp), new Double(value)); // wenn keine Exception fliegt geht die Aenderung in Ordnung maxTemp = value; } }
Constrainer.java
import java.beans.*; public class Constrainer implements VetoableChangeListener{ // implementieren des interface: VetoableChangeListener public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException{ // die Limitierung wird getestet, liegt der Wert // auch wirklich im Bereich (11 bis 33) double value = ((Double)evt.getNewValue()).doubleValue(); if (value>33 || value<11){ throw new PropertyVetoException("VETO von Constrainer: Wert " +value+" abgelehnt",evt); }else{ System.out.println("Wert: "+value+" von Constrainer angenommen"); } } }