import javax.swing.*;
import javax.swing.event.ChangeListener;

public class MVCExample5 extends SpinnerNumberModel {
  
  public MVCExample5(int value, int minimum, int maximum, int stepSize) {
    super(value,minimum,maximum,stepSize);
  }
  
  public class BoundedRangeModelAdapter implements BoundedRangeModel {

    public int getExtent() {
      return getStepSize().intValue();
    }

    public int getMaximum() {
      return ((Number)MVCExample5.this.getMaximum()).intValue();
    }

    public int getMinimum() {
      return ((Number)MVCExample5.this.getMinimum()).intValue();
    }

    public int getValue() {
      return getNumber().intValue();
    }

    public boolean getValueIsAdjusting() {
      return adjusting;
    }

    public void setExtent(int newExtent) {
      setStepSize(new Integer(newExtent));
    }

    public void setMaximum(int newMaximum) {
      MVCExample5.this.setMaximum(new Integer(newMaximum));
    }

    public void setMinimum(int newMinimum) {
      MVCExample5.this.setMinimum(new Integer(newMinimum));
    }

    public void setValue(int newValue) {
      MVCExample5.this.setValue(new Integer(newValue));
    }

    public void setRangeProperties(int value, int extent, int min, int max, boolean adjusting) {
      setValue(value);
      setExtent(extent);
      setMinimum(min);
      setMaximum(max);
      this.adjusting=adjusting;
    }

    public void setValueIsAdjusting(boolean adjusting) {
      this.adjusting=adjusting;
    }

    public void addChangeListener(ChangeListener listener) {
      MVCExample5.this.addChangeListener(listener);  
    }

    public void removeChangeListener(ChangeListener listener) {
      MVCExample5.this.removeChangeListener(listener);
    }
    
    private boolean adjusting;
  }
  
  public static void main(String[] args) {
    MVCExample5 model=new MVCExample5(0,0,100,1);
    
    JSpinner spinner=new JSpinner(model);
    JSlider slider=new JSlider(model.new BoundedRangeModelAdapter());
    
    JPanel panel=new JPanel();
    panel.add(spinner);
    panel.add(slider);
    
    JFrame frame=new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(panel);
    frame.setSize(400,300);
    frame.show();
  }
}