package org.appwork.utils.swing;
import java.text.ParseException;
import javax.swing.JFormattedTextField.AbstractFormatter;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import javax.swing.text.DefaultFormatterFactory;
public class JSimpleNumberSpinner extends JSpinner {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* @param i
* @param j
* @param k
*/
public JSimpleNumberSpinner(final int steps, final int min, final int max, final int secondmin) {
super(new SpinnerNumberModel(min, min, max, steps) {
/**
*
*/
private static final long serialVersionUID = -5666000802809450936L;
@Override
public Object getNextValue() {
Number n = getNumber();
if (n.intValue() >= min && n.intValue() < secondmin) return secondmin;
return super.getNextValue();
}
@Override
public Object getPreviousValue() {
Number n = getNumber();
if (n.intValue() >= min && n.intValue() <= secondmin) return min;
return super.getPreviousValue();
}
});
final DefaultFormatterFactory factory = new DefaultFormatterFactory(new AbstractFormatter() {
/**
*
*/
private static final long serialVersionUID = 3244976028578192576L;
@Override
public Object stringToValue(final String text) throws ParseException {
try {
int i = Integer.parseInt(text);
if (i > min && i < secondmin) i = min;
if (i < min) i = min;
if (i > max) i = max;
return i;
} catch (Throwable e) {
return null;
}
}
@Override
public String valueToString(final Object value) throws ParseException {
return value + "";
}
});
((JSpinner.DefaultEditor) this.getEditor()).getTextField().setFormatterFactory(factory);
}
}