    /*
     * 1.1+Swing version.
     */

    import javax.swing.*;
    import javax.swing.event.*;

    public class FollowerRangeModel extends ConverterRangeModel
                                    implements ChangeListener {
        ConverterRangeModel dataModel;

        public FollowerRangeModel(ConverterRangeModel dataModel) {
            this.dataModel = dataModel;
            dataModel.addChangeListener(this);
        }

        public void stateChanged(ChangeEvent e) {
            fireStateChanged();
        }

        public int getMaximum() {
            int modelMax = dataModel.getMaximum();
            double multiplyBy = dataModel.getMultiplier() / multiplier;
            if (DEBUG) {
                System.out.println("In FollowerRangeModel getMaximum");
                System.out.println("  dataModel.getMaximum = " + modelMax
                                    + "; multiply by " + multiplyBy
                                    + "; result: " + modelMax * multiplyBy);
            }
            return (int)(modelMax * multiplyBy);
        }

        public void setMaximum(int newMaximum) {
            dataModel.setMaximum((int)(newMaximum *
                         (multiplier / dataModel.getMultiplier())));
        }

        public int getValue() {
            return (int)getDoubleValue();
        }

        public void setValue(int newValue) {
            setDoubleValue((double)newValue);
        }

        public double getDoubleValue() {
            return dataModel.getDoubleValue()
                   * dataModel.getMultiplier()
                   / multiplier;
        }

        public void setDoubleValue(double newValue) {
            dataModel.setDoubleValue(
                         newValue * multiplier
                         / dataModel.getMultiplier());
        }

        public int getExtent() {
            return super.getExtent();
        }

        public void setExtent(int newExtent) {
            super.setExtent(newExtent);
        }

        public void setRangeProperties(int value,
                                       int extent,
                                       int min,
                                       int max,
                                       boolean adjusting) {
            double multiplyBy = multiplier / dataModel.getMultiplier();
            dataModel.setRangeProperties(value * multiplyBy,
                                         extent, min,
                                         (int)(max * multiplyBy),
                                         adjusting);
        }
    }