FileDocCategorySizeDatePackage
FloatControlComponent.javaAPI DocExample2338Mon Jan 09 11:02:00 GMT 2006None

FloatControlComponent.java

import javax.swing.event.*;
import javax.swing.*;
import javax.sound.sampled.*;

public class FloatControlComponent extends JPanel 
    implements ChangeListener {

    FloatControl control;
    JSlider slider;
    float min, max, range;
    final static int SLIDER_MIN = 0;
    final static int SLIDER_MAX = 1000;
    final static float SLIDER_RANGE = SLIDER_MAX - SLIDER_MIN;

    public FloatControlComponent (FloatControl c) {
        control = c;
        /*
        System.out.println ("Control " + control +
                            ": min = " +  control.getMinimum() +
                            ", max = " +  control.getMaximum());
        */
        min = c.getMinimum();
        max = c.getMaximum();
        range = max - min;
        add (new JLabel (control.getMinLabel()));
        slider = new JSlider (SLIDER_MIN, SLIDER_MAX);
        slider.addChangeListener (this);
        setSliderFromControl();
        add (slider);
        add (new JLabel (control.getMaxLabel()));
    }

    private void setSliderFromControl() {
        // figure out value as percent of range
        float offsetValue = control.getValue() - min;
        // System.out.println ("offsetValue = " + offsetValue);
        float percent = 0.0f;
        if (range != 0.0)
            percent = offsetValue / range;
        // System.out.println ("percent = " + offsetValue/range);
        // apply that to SLIDER_RANGE
        int sliderValue = (int) (percent * SLIDER_RANGE);
        // System.out.println ("sliderValue = " + sliderValue);
        slider.setValue (sliderValue);
    }

    private void setControlFromSlider() {
        // figure out slider percentage
        float sliderPercentage =
            (float) slider.getValue() / SLIDER_RANGE;
        // System.out.println ("new slider value = " + slider.getValue() +
        //                    ", percentage= " + sliderPercentage);
        // figure out value for that percentage of range
        float rangeOffset = sliderPercentage * range;
        float newValue = rangeOffset + min;
        // System.out.println ("rangeOffset = " + rangeOffset +
        //                     ", newValue = " + newValue);
        control.setValue (newValue);
    }

    // ChangeListener implementation
    public void stateChanged (ChangeEvent e) {
        setControlFromSlider();
    }

}