SpinnerNumberModel.java [plain text]
package javax.swing;
import java.io.Serializable;
public class SpinnerNumberModel extends AbstractSpinnerModel
implements Serializable
{
private static final long serialVersionUID = 7279176385485777821L;
private Number value;
private Comparable minimum;
private Comparable maximum;
private Number stepSize;
public SpinnerNumberModel()
{
this(new Integer(0), null, null, new Integer(1));
}
public SpinnerNumberModel(double value, double minimum, double maximum,
double stepSize)
{
this(new Double(value), new Double(minimum), new Double(maximum),
new Double(stepSize));
}
public SpinnerNumberModel(int value, int minimum, int maximum, int stepSize)
{
this(new Integer(value), new Integer(minimum), new Integer(maximum),
new Integer(stepSize));
}
public SpinnerNumberModel(Number value, Comparable minimum,
Comparable maximum, Number stepSize)
{
if (stepSize == null)
throw new IllegalArgumentException("stepSize may not be null");
if (value == null)
throw new IllegalArgumentException("value may not be null");
if (minimum != null)
{
if (minimum.compareTo(value) > 0)
throw new IllegalArgumentException("minimum is not <= value");
}
else
minimum = new Comparable()
{
public int compareTo(Object obj)
{
return -1;
}
};
if (maximum != null)
{
if (maximum.compareTo(value) < 0)
throw new IllegalArgumentException("maximum is not >= value");
}
else
maximum = new Comparable()
{
public int compareTo(Object obj)
{
return 1;
}
};
this.value = value;
this.stepSize = stepSize;
this.minimum = minimum;
this.maximum = maximum;
}
public void setValue(Object value)
{
if (! (value instanceof Number))
throw new IllegalArgumentException("value must be a Number");
this.value = (Number) value;
fireStateChanged();
}
public Object getValue()
{
return value;
}
public Object getNextValue()
{
Number num;
if (value instanceof Double)
num = new Double(value.doubleValue() + stepSize.doubleValue());
else if (value instanceof Float)
num = new Double(value.floatValue() + stepSize.floatValue());
else if (value instanceof Long)
num = new Long(value.longValue() + stepSize.longValue());
else if (value instanceof Integer)
num = new Integer(value.intValue() + stepSize.intValue());
else if (value instanceof Short)
num = new Short((short) (value.shortValue() + stepSize.shortValue()));
else
num = new Byte((byte) (value.byteValue() + stepSize.byteValue()));
return maximum.compareTo(num) >= 0 ? num : null;
}
public Object getPreviousValue()
{
Number num;
if (value instanceof Double)
num = new Double(value.doubleValue() - stepSize.doubleValue());
else if (value instanceof Float)
num = new Double(value.floatValue() - stepSize.floatValue());
else if (value instanceof Long)
num = new Long(value.longValue() - stepSize.longValue());
else if (value instanceof Integer)
num = new Integer(value.intValue() - stepSize.intValue());
else if (value instanceof Short)
num = new Short((short) (value.shortValue() - stepSize.shortValue()));
else
num = new Byte((byte) (value.byteValue() - stepSize.byteValue()));
return minimum.compareTo(num) <= 0 ? num : null;
}
public Number getNumber()
{
return value;
}
public Comparable getMinimum()
{
return minimum;
}
public void setMinimum(Comparable newMinimum)
{
if (minimum != newMinimum)
{
minimum = newMinimum;
fireStateChanged();
}
}
public Comparable getMaximum()
{
return maximum;
}
public void setMaximum(Comparable newMaximum)
{
if (maximum != newMaximum)
{
maximum = newMaximum;
fireStateChanged();
}
}
public Number getStepSize()
{
return stepSize;
}
public void setStepSize(Number newStepSize)
{
if (newStepSize == null)
throw new IllegalArgumentException();
if (stepSize != newStepSize)
{
stepSize = newStepSize;
fireStateChanged();
}
}
}