package qls.gui.widget.input.spinbox; import java.text.NumberFormat; import java.util.Locale; import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeListener; import ql.Value; import ql.value.MoneyValue; import qls.ast.statement.widget.styling.StyleProperties; import qls.gui.widget.input.Spinbox; import com.sun.corba.se.impl.io.TypeMismatchException; public class MoneySpinbox extends Spinbox<MoneyValue> implements ChangeListener { private NumberFormat decimalFormat = NumberFormat.getCurrencyInstance(new Locale("NL", "nl")); public MoneySpinbox() { super(new SpinnerNumberModel( 0.0, //initial value 0.0, //min Float.MAX_VALUE, //max 0.1 )); } public MoneySpinbox(MoneyValue moneyValue) { this(); disable(); spinbox().setValue(decimalFormat.format(moneyValue.getPrimitive())); } @Override public Number convertValue(Value value) { if(!value.isNumeric()) { setError("Not a valid number!"); throw new TypeMismatchException(); } removeError(); // Force an ugly cast into a float. return Math.round(Float.parseFloat(value.toString()) * 100.0) / 100.0; } @Override public MoneyValue getValue() { return new MoneyValue(model().getNumber().floatValue()); } @Override public void setStyle(StyleProperties properties) { stylizer.setStyle(spinbox(), properties); } }