package qls.gui.widget.input.slider; import java.text.DecimalFormat; import java.text.NumberFormat; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import ql.value.FloatValue; import ql.value.IntegerValue; import qls.ast.statement.widget.styling.StyleProperties; import qls.gui.widget.input.Slider; /** * This class uses some voodoo. JSliders are incapable of dealing with floating point values. * So the value of the slider is a money value in CENTS. That value is divided by 100 * to make it euroes (or so) again. * @author kevin * */ public class MoneySlider extends Slider<FloatValue> implements ChangeListener { private final float FACTOR = 100; private NumberFormat decimalFormat = new DecimalFormat("#0.00"); public MoneySlider(IntegerValue minValue, IntegerValue maxValue) { super(minValue, maxValue); } @Override public void setValue(FloatValue value) { slider.setValue(Math.round((value.getPrimitive() * FACTOR))); label.setText(decimalFormat.format(value.getPrimitive())); } @Override public FloatValue getValue() { return new FloatValue((float) slider.getValue() / FACTOR); } @Override public void updateComponent() { label.setText(decimalFormat.format(getValue().getPrimitive())); super.updateComponent(); } @Override public void stateChanged(ChangeEvent e) { handleChange(getValue(), this); } @Override public void setStyle(StyleProperties properties) { stylizer.setStyle(slider, properties); } }