001    package org.springframework.richclient.form.binding.swing;
002    
003    import org.springframework.richclient.form.binding.support.CustomBinding;
004    import org.springframework.binding.form.FormModel;
005    
006    import javax.swing.event.ChangeListener;
007    import javax.swing.event.ChangeEvent;
008    import javax.swing.*;
009    
010    @SuppressWarnings("unchecked")
011    public class SpinnerBinding extends CustomBinding implements ChangeListener
012    {
013        private final JSpinner spinner;
014    
015        public SpinnerBinding(FormModel formModel, String propertyPath, Class numberClass, JSpinner spinner)
016        {
017            super(formModel, propertyPath, numberClass);
018            this.spinner = spinner;
019        }
020    
021        @Override
022        protected JComponent doBindControl()
023        {
024            spinner.setValue(getValue());
025            spinner.getModel().addChangeListener(this);
026            return this.spinner;
027        }
028    
029        @Override
030        protected void readOnlyChanged()
031        {
032            spinner.setEnabled(!isReadOnly() && isEnabled());
033        }
034    
035        @Override
036        protected void enabledChanged()
037        {
038            readOnlyChanged();
039        }
040    
041        public void stateChanged(ChangeEvent e)
042        {
043            controlValueChanged(this.spinner.getValue());
044        }
045    
046        @Override
047        protected void valueModelChanged(Object newValue)
048        {
049            this.spinner.setValue(newValue);
050        }
051    
052    }