Development Java Tutorial

// A vetoable property change event is fired when a constrained property is changed. 
// A listener can veto the change by throwing PropertyVetoException and preventing the change.
import java.beans.PropertyChangeEvent;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeListener;
import java.beans.VetoableChangeSupport;
public class Main {
  public static void main(String[] argv) throws Exception {
    MyBean bean = new MyBean();
    bean.addVetoableChangeListener(new MyVetoableChangeListener());
  }
}
class MyVetoableChangeListener implements VetoableChangeListener {
  public void vetoableChange(PropertyChangeEvent evt)
      throws PropertyVetoException {
    Object oldValue = evt.getOldValue();
    Object newValue = evt.getNewValue();
    boolean veto = false;
    if (veto) {
      throw new PropertyVetoException("the reason for the veto", evt);
    }
  }
}
class MyBean {
  VetoableChangeSupport vceListeners = new VetoableChangeSupport(this);
  int myProperty;
  public int getMyProperty() {
    return myProperty;
  }
  public void setMyProperty(int newValue) throws PropertyVetoException {
    try {
      vceListeners.fireVetoableChange("myProperty", new Integer(myProperty),
          new Integer(newValue));
      myProperty = newValue;
    } catch (PropertyVetoException e) {
      throw e;
    }
  }
  public synchronized void addVetoableChangeListener(
      VetoableChangeListener listener) {
    vceListeners.addVetoableChangeListener(listener);
  }
  public synchronized void removeVetoableChangeListener(
      VetoableChangeListener listener) {
    vceListeners.removeVetoableChangeListener(listener);
  }
}