- java.lang.Object
-
- javax.swing.AbstractSpinnerModel
-
- javax.swing.SpinnerNumberModel
-
- All Implemented Interfaces:
Serializable,SpinnerModel
public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializable
ASpinnerModelfor sequences of numbers. The upper and lower bounds of the sequence are defined by properties calledminimumandmaximum. The size of the increase or decrease computed by thenextValueandpreviousValuemethods is defined by a property calledstepSize. Theminimumandmaximumproperties can benullto indicate that the sequence has no lower or upper limit. All of the properties in this class are defined in terms of two generic types:NumberandComparable, so that all Java numeric types may be accommodated. Internally, there's only support for values whose type is one of the primitiveNumbertypes:Double,Float,Long,Integer,Short, orByte.To create a
SpinnerNumberModelfor the integer range zero to one hundred, with fifty as the initial value, one could write:Integer value = Integer.valueOf(50); Integer min = Integer.valueOf(0); Integer max = Integer.valueOf(100); Integer step = Integer.valueOf(1); SpinnerNumberModel model = new SpinnerNumberModel(value, min, max, step); int fifty = model.getNumber().intValue();
Spinners for integers and doubles are common, so special constructors for these cases are provided. For example to create the model in the previous example, one could also write:
SpinnerNumberModel model = new SpinnerNumberModel(50, 0, 100, 1);
This model inherits a
ChangeListener. TheChangeListenersare notified whenever the model'svalue,stepSize,minimum, ormaximumproperties changes.- Since:
- 1.4
- See Also:
JSpinner,SpinnerModel,AbstractSpinnerModel,SpinnerListModel,SpinnerDateModel, Serialized Form
-
-
Field Summary
-
Fields declared in class javax.swing.AbstractSpinnerModel
listenerList
-
-
Constructor Summary
Constructors Constructor Description SpinnerNumberModel()Constructs aSpinnerNumberModelwith nominimumormaximumvalue,stepSizeequal to one, and an initial value of zero.SpinnerNumberModel(double value, double minimum, double maximum, double stepSize)Constructs aSpinnerNumberModelwith the specifiedvalue,minimum/maximumbounds, andstepSize.SpinnerNumberModel(int value, int minimum, int maximum, int stepSize)Constructs aSpinnerNumberModelwith the specifiedvalue,minimum/maximumbounds, andstepSize.SpinnerNumberModel(Number value, Comparable<?> minimum, Comparable<?> maximum, Number stepSize)Constructs aSpinnerModelthat represents a closed sequence of numbers fromminimumtomaximum.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Comparable<?>getMaximum()Returns the last number in the sequence.Comparable<?>getMinimum()Returns the first number in this sequence.ObjectgetNextValue()Returns the next number in the sequence.NumbergetNumber()Returns the value of the current element of the sequence.ObjectgetPreviousValue()Returns the previous number in the sequence.NumbergetStepSize()Returns the size of the value change computed by thegetNextValueandgetPreviousValuemethods.ObjectgetValue()Returns the value of the current element of the sequence.voidsetMaximum(Comparable<?> maximum)Changes the upper bound for numbers in this sequence.voidsetMinimum(Comparable<?> minimum)Changes the lower bound for numbers in this sequence.voidsetStepSize(Number stepSize)Changes the size of the value change computed by thegetNextValueandgetPreviousValuemethods.voidsetValue(Object value)Sets the current value for this sequence.-
Methods declared in class javax.swing.AbstractSpinnerModel
addChangeListener, fireStateChanged, getChangeListeners, getListeners, removeChangeListener
-
-
-
-
Constructor Detail
-
SpinnerNumberModel
public SpinnerNumberModel(Number value, Comparable<?> minimum, Comparable<?> maximum, Number stepSize)
Constructs aSpinnerModelthat represents a closed sequence of numbers fromminimumtomaximum. ThenextValueandpreviousValuemethods compute elements of the sequence by adding or subtractingstepSizerespectively. All of the parameters must be mutuallyComparable,valueandstepSizemust be instances ofIntegerLong,Float, orDouble.The
minimumandmaximumparameters can benullto indicate that the range doesn't have an upper or lower bound. IfvalueorstepSizeisnull, or if bothminimumandmaximumare specified andminimum > maximumthen anIllegalArgumentExceptionis thrown. Similarly if(minimum <= value <= maximum) is false, anIllegalArgumentExceptionis thrown.- Parameters:
value- the current (nonnull) value of the modelminimum- the first number in the sequence ornullmaximum- the last number in the sequence ornullstepSize- the difference between elements of the sequence- Throws:
IllegalArgumentException- if stepSize or value isnullor if the following expression is false:minimum <= value <= maximum
-
SpinnerNumberModel
public SpinnerNumberModel(int value, int minimum, int maximum, int stepSize)Constructs aSpinnerNumberModelwith the specifiedvalue,minimum/maximumbounds, andstepSize.- Parameters:
value- the current value of the modelminimum- the first number in the sequencemaximum- the last number in the sequencestepSize- the difference between elements of the sequence- Throws:
IllegalArgumentException- if the following expression is false:minimum <= value <= maximum
-
SpinnerNumberModel
public SpinnerNumberModel(double value, double minimum, double maximum, double stepSize)Constructs aSpinnerNumberModelwith the specifiedvalue,minimum/maximumbounds, andstepSize.- Parameters:
value- the current value of the modelminimum- the first number in the sequencemaximum- the last number in the sequencestepSize- the difference between elements of the sequence- Throws:
IllegalArgumentException- if the following expression is false:minimum <= value <= maximum
-
SpinnerNumberModel
public SpinnerNumberModel()
Constructs aSpinnerNumberModelwith nominimumormaximumvalue,stepSizeequal to one, and an initial value of zero.
-
-
Method Detail
-
setMinimum
public void setMinimum(Comparable<?> minimum)
Changes the lower bound for numbers in this sequence. Ifminimumisnull, then there is no lower bound. No bounds checking is done here; the newminimumvalue may invalidate the(minimum <= value <= maximum)invariant enforced by the constructors. This is to simplify updating the model, naturally one should ensure that the invariant is true before calling thegetNextValue,getPreviousValue, orsetValuemethods.Typically this property is a
Numberof the same type as thevaluehowever it's possible to use anyComparablewith acompareTomethod for aNumberwith the same type as the value. For example if value was aLong,minimummight be a Date subclass defined like this:MyDate extends Date { // Date already implements Comparable public int compareTo(Long o) { long t = getTime(); return (t < o.longValue() ? -1 : (t == o.longValue() ? 0 : 1)); } }This method fires a
ChangeEventif theminimumhas changed.- Parameters:
minimum- aComparablethat has acompareTomethod forNumbers with the same type asvalue- See Also:
getMinimum(),setMaximum(java.lang.Comparable<?>),SpinnerModel.addChangeListener(javax.swing.event.ChangeListener)
-
getMinimum
public Comparable<?> getMinimum()
Returns the first number in this sequence.- Returns:
- the value of the
minimumproperty - See Also:
setMinimum(java.lang.Comparable<?>)
-
setMaximum
public void setMaximum(Comparable<?> maximum)
Changes the upper bound for numbers in this sequence. Ifmaximumisnull, then there is no upper bound. No bounds checking is done here; the newmaximumvalue may invalidate the(minimum <= value < maximum)invariant enforced by the constructors. This is to simplify updating the model, naturally one should ensure that the invariant is true before calling thenext,previous, orsetValuemethods.Typically this property is a
Numberof the same type as thevaluehowever it's possible to use anyComparablewith acompareTomethod for aNumberwith the same type as the value. SeesetMinimum(Comparable)for an example.This method fires a
ChangeEventif themaximumhas changed.- Parameters:
maximum- aComparablethat has acompareTomethod forNumbers with the same type asvalue- See Also:
getMaximum(),setMinimum(java.lang.Comparable<?>),SpinnerModel.addChangeListener(javax.swing.event.ChangeListener)
-
getMaximum
public Comparable<?> getMaximum()
Returns the last number in the sequence.- Returns:
- the value of the
maximumproperty - See Also:
setMaximum(java.lang.Comparable<?>)
-
setStepSize
public void setStepSize(Number stepSize)
Changes the size of the value change computed by thegetNextValueandgetPreviousValuemethods. AnIllegalArgumentExceptionis thrown ifstepSizeisnull.This method fires a
ChangeEventif thestepSizehas changed.- Parameters:
stepSize- the size of the value change computed by thegetNextValueandgetPreviousValuemethods- See Also:
getNextValue(),getPreviousValue(),getStepSize(),SpinnerModel.addChangeListener(javax.swing.event.ChangeListener)
-
getStepSize
public Number getStepSize()
Returns the size of the value change computed by thegetNextValueandgetPreviousValuemethods.- Returns:
- the value of the
stepSizeproperty - See Also:
setStepSize(java.lang.Number)
-
getNextValue
public Object getNextValue()
Returns the next number in the sequence.- Specified by:
getNextValuein interfaceSpinnerModel- Returns:
value + stepSizeornullif the sum exceedsmaximum.- See Also:
SpinnerModel.getNextValue(),getPreviousValue(),setStepSize(java.lang.Number)
-
getPreviousValue
public Object getPreviousValue()
Returns the previous number in the sequence.- Specified by:
getPreviousValuein interfaceSpinnerModel- Returns:
value - stepSize, ornullif the sum is less thanminimum.- See Also:
SpinnerModel.getPreviousValue(),getNextValue(),setStepSize(java.lang.Number)
-
getNumber
public Number getNumber()
Returns the value of the current element of the sequence.- Returns:
- the value property
- See Also:
setValue(java.lang.Object)
-
getValue
public Object getValue()
Returns the value of the current element of the sequence.- Specified by:
getValuein interfaceSpinnerModel- Returns:
- the value property
- See Also:
setValue(java.lang.Object),getNumber()
-
setValue
public void setValue(Object value)
Sets the current value for this sequence. Ifvalueisnull, or not aNumber, anIllegalArgumentExceptionis thrown. No bounds checking is done here; the new value may invalidate the(minimum <= value <= maximum)invariant enforced by the constructors. It's also possible to set the value to be something that wouldn't naturally occur in the sequence, i.e. a value that's not modulo thestepSize. This is to simplify updating the model, and to accommodate spinners that don't want to restrict values that have been directly entered by the user. Naturally, one should ensure that the(minimum <= value <= maximum)invariant is true before calling thenext,previous, orsetValuemethods.This method fires a
ChangeEventif the value has changed.- Specified by:
setValuein interfaceSpinnerModel- Parameters:
value- the current (nonnull)Numberfor this sequence- Throws:
IllegalArgumentException- ifvalueisnullor not aNumber- See Also:
getNumber(),getValue(),SpinnerModel.addChangeListener(javax.swing.event.ChangeListener)
-
-