package org.limewire.ui.swing.options;
import javax.swing.BoundedRangeModel;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;
/**
* Abstract component that provides the user with a slider for picking a
* percentage of bandwidth to use. The slider allows the implementor to select
* between a provided min and a max value, and displays the message from the
* implemented getMessage method to the right of the slider.
*/
public abstract class LimeSlider extends JComponent {
private JSlider slider;
private JLabel label;
public LimeSlider(int minSlider, int maxSlider) {
setOpaque(false);
setLayout(new MigLayout("nogrid, fill"));
label = new JLabel();
slider = new JSlider(minSlider, maxSlider);
slider.setOpaque(false);
slider.setMajorTickSpacing(10);
slider.addChangeListener(new SliderChangeListener(slider, label));
add(slider);
add(label);
}
public int getValue() {
return slider.getValue();
}
public void setValue(int value) {
slider.setValue(value);
}
public BoundedRangeModel getModel() {
return slider.getModel();
}
/**
* Changes the label for the slider based on the slider's current value.
*/
private class SliderChangeListener implements ChangeListener {
private JSlider slider;
private JLabel label;
public SliderChangeListener(JSlider slider, JLabel label) {
this.slider = slider;
this.label = label;
}
@Override
public void stateChanged(ChangeEvent e) {
int value = slider.getValue();
label.setText(getMessage(value));
}
}
/**
* Returns a message for the slider based on the given value of the slider.
* The value can be expected to be within the range of minSlider to
* maxSlider that was initially passed to the LimeSlider implementor.
*/
public abstract String getMessage(int value);
}