001    package org.springframework.richclient.form.binding.swing;
002    
003    import org.springframework.richclient.form.binding.support.AbstractBinder;
004    import org.springframework.richclient.form.binding.Binding;
005    import org.springframework.binding.form.FormModel;
006    
007    import javax.swing.*;
008    import java.util.Map;
009    
010    @SuppressWarnings("unchecked")
011    public class SpinnerBinder extends AbstractBinder
012    {
013        private Comparable minimum = null;
014        private Comparable maximum = null;
015        private Number currentValue = new Integer(0);
016        private Number stepValue = new Integer(1);
017    
018        public SpinnerBinder()
019        {
020            this(Integer.class);
021        }
022    
023        public SpinnerBinder(Class requiredClass)
024        {
025            super(requiredClass);
026        }
027    
028        public void setMinimum(Comparable minimum)
029        {
030            this.minimum = minimum;
031        }
032    
033        public void setMaximum(Comparable maximum)
034        {
035            this.maximum = maximum;
036        }
037    
038        public void setCurrentValue(Number currentValue)
039        {
040            this.currentValue = currentValue;
041        }
042    
043        public void setStepValue(Number stepValue)
044        {
045            this.stepValue = stepValue;
046        }
047    
048        @Override
049        protected JComponent createControl(Map context)
050        {
051            return new JSpinner(new SpinnerNumberModel(this.currentValue, this.minimum, this.maximum, this.stepValue));
052        }
053    
054        @Override
055        protected Binding doBind(JComponent control, FormModel formModel, String formPropertyPath, Map context)
056        {
057            return new SpinnerBinding(formModel, formPropertyPath, getRequiredSourceClass(), (JSpinner) control);
058        }
059    
060    }