JellyBean Code

directly from the BDK1.1 distribution



This is one of the beans provided as demos in Sun's BDK distribution

package sunw.demo.jelly;

import java.awt.*;
import java.beans.*;

/**
 * A simple bean with bound properties and one constrained property. The constrained
 * property is "priceInCents".  VetoablePropertyChange listeners can reject a proposed
 * value for this property by throwing a PropertyVetoException.@see sunw.demo.misc.Voter
 */
public class JellyBean extends java.awt.Component {

    /** Construct a smallish JellyBean. */
    public JellyBean( ) {
    }

    public void paint(Graphics g) {
 g.setColor(ourColor);
 g.fillArc(5, 5, 30, 30, 0, 360);
 g.fillArc(25, 5, 30, 30, 0, 360);
 g.fillRect(20, 5, 20, 30);
    }

    public Dimension getPreferredSize( ) {
      return new Dimension(60,40);
     }

    /** Returns the color that the jelly bean is rendered with.
        * @see #setColor */
    public synchronized Color getColor( ) {
        return ourColor;
       }

    /** Sets the color that the jelly bean is rendered with.  This is a bound property.
     * @see #getColor
     */
    public void setColor(Color newColor) {
        Color oldColor = ourColor;
        ourColor = newColor;
        changes.firePropertyChange("color", oldColor, newColor);
        repaint( );
    }

    /** Returns the current price.
     *   @see #setPriceInCents
     */
    public synchronized int getPriceInCents( ) {
        return ourPriceInCents;
    }

    /**
     * Set the price in cents unless one of the VetoableChangeListeners
     * throws a PropertyVetoException.  This is a constrained property.
     * @exception PropertyVetoException if the proposed price was vetoed
     */
    public void setPriceInCents(int newPriceInCents)
                            throws PropertyVetoException {
 int oldPriceInCents = ourPriceInCents;

 // First tell the vetoers about the change.  If anyone objects, we
 // don't catch the exception but just let if pass on to our caller.

 vetos.fireVetoableChange("priceInCents",
    new Integer(oldPriceInCents),
    new Integer(newPriceInCents));
 // No-one vetoed, so go ahead and make the change.
  ourPriceInCents = newPriceInCents;
 changes.firePropertyChange("priceInCents",
    new Integer(oldPriceInCents),
    new Integer(newPriceInCents));
    }

    //----------------------------------------------------------------------
    // Methods for registering listeners:

    /**
     * The specified PropertyChangeListeners <b>propertyChange</b> method will
     * be called each time the value of any bound property is changed.
     * The PropertyListener object is addded to a list of PropertyChangeListeners
     * managed by the JellyBean, it can be removed with removePropertyChangeListener.
     * Note: the JavaBeans specification does not require PropertyChangeListeners
     * to run in any particular order.
     *
     * @see #removePropertyChangeListener
     * @param l the PropertyChangeListener
     */
    public void addPropertyChangeListener(PropertyChangeListener l) {
      changes.addPropertyChangeListener(l);
      }

    /**
     * Remove this PropertyChangeListener from the JellyBeans internal list.
     * If the PropertyChangeListener isn't on the list, silently do nothing.
     *
     * @see #addPropertyChangeListener
     * @param l the PropertyChangeListener
     */
    public void removePropertyChangeListener(PropertyChangeListener l) {
      changes.removePropertyChangeListener(l);
      }

    /**
     * The specified VetoableChangeListeners <b>vetoableChange</b> method will
     * be called each time the value of any constrained property is changed.
     * Currently, the only constrained property is "priceInCents".
     * The VetoableChangeListener object is addded to a list of VetoableChangeListeners
     * managed by the JellyBean, it can be removed with removeVetoableChangeListener.
     * Note: the JavaBeans specification does not require VetoableChangeListeners
     * to run in any particular order.
     *
     * @see #removeVetoableChangeListener
     * @param l the VetoableChangeListener
     */
    public void addVetoableChangeListener(VetoableChangeListener l) {
       vetos.addVetoableChangeListener(l);
      }

    /**
     * Remove this VetoableChangeListener from the JellyBeans internal list.
     * If the VetoableChangeListener isn't on the list, silently do nothing.
     *
     * @see #addVetoableChangeListener
     * @param l the VetoableChangeListener
     */
    public void removeVetoableChangeListener(VetoableChangeListener l) {
      vetos.removeVetoableChangeListener(l);
     }

    //----------------------------------------------------------------------
    // Private data fields:

    private PropertyChangeSupport changes = new PropertyChangeSupport(this);
    private VetoableChangeSupport vetos = new VetoableChangeSupport(this);

    private Color ourColor = Color.orange;
    private int ourPriceInCents = 2;
}