1:
37:
38: package ;
39:
40: import ;
41:
42:
48: public class SpinnerNumberModel extends AbstractSpinnerModel
49: implements Serializable
50: {
51:
54: private static final long serialVersionUID = 7279176385485777821L;
55:
56:
57: private Number value;
58:
59:
60: private Comparable minimum;
61:
62:
63: private Comparable maximum;
64:
65:
66: private Number stepSize;
67:
68:
72: public SpinnerNumberModel()
73: {
74: this(new Integer(0), null, null, new Integer(1));
75: }
76:
77:
87: public SpinnerNumberModel(double value, double minimum, double maximum,
88: double stepSize)
89: {
90: this(new Double(value), new Double(minimum), new Double(maximum),
91: new Double(stepSize));
92: }
93:
94:
104: public SpinnerNumberModel(int value, int minimum, int maximum, int stepSize)
105: {
106: this(new Integer(value), new Integer(minimum), new Integer(maximum),
107: new Integer(stepSize));
108: }
109:
110:
122: public SpinnerNumberModel(Number value, Comparable minimum,
123: Comparable maximum, Number stepSize)
124: {
125: if (stepSize == null)
126: throw new IllegalArgumentException("stepSize may not be null");
127: if (value == null)
128: throw new IllegalArgumentException("value may not be null");
129: if (minimum != null)
130: {
131: if (minimum.compareTo(value) > 0)
132: throw new IllegalArgumentException("minimum is not <= value");
133: }
134: else
135: minimum = new Comparable()
136: {
137: public int compareTo(Object obj)
138: {
139: return -1;
140: }
141: };
142:
143:
144: if (maximum != null)
145: {
146: if (maximum.compareTo(value) < 0)
147: throw new IllegalArgumentException("maximum is not >= value");
148: }
149: else
150: maximum = new Comparable()
151: {
152: public int compareTo(Object obj)
153: {
154: return 1;
155: }
156: };
157:
158:
159: this.value = value;
160: this.stepSize = stepSize;
161: this.minimum = minimum;
162: this.maximum = maximum;
163: }
164:
165:
173: public void setValue(Object value)
174: {
175: if (! (value instanceof Number))
176: throw new IllegalArgumentException("value must be a Number");
177:
178: this.value = (Number) value;
179: fireStateChanged();
180: }
181:
182:
187: public Object getValue()
188: {
189: return value;
190: }
191:
192:
198: public Object getNextValue()
199: {
200: Number num;
201:
202: if (value instanceof Double)
203: num = new Double(value.doubleValue() + stepSize.doubleValue());
204: else if (value instanceof Float)
205: num = new Double(value.floatValue() + stepSize.floatValue());
206: else if (value instanceof Long)
207: num = new Long(value.longValue() + stepSize.longValue());
208: else if (value instanceof Integer)
209: num = new Integer(value.intValue() + stepSize.intValue());
210: else if (value instanceof Short)
211: num = new Short((short) (value.shortValue() + stepSize.shortValue()));
212: else
213: num = new Byte((byte) (value.byteValue() + stepSize.byteValue()));
214:
215: return maximum.compareTo(num) >= 0 ? num : null;
216: }
217:
218:
224: public Object getPreviousValue()
225: {
226: Number num;
227:
228: if (value instanceof Double)
229: num = new Double(value.doubleValue() - stepSize.doubleValue());
230: else if (value instanceof Float)
231: num = new Double(value.floatValue() - stepSize.floatValue());
232: else if (value instanceof Long)
233: num = new Long(value.longValue() - stepSize.longValue());
234: else if (value instanceof Integer)
235: num = new Integer(value.intValue() - stepSize.intValue());
236: else if (value instanceof Short)
237: num = new Short((short) (value.shortValue() - stepSize.shortValue()));
238: else
239: num = new Byte((byte) (value.byteValue() - stepSize.byteValue()));
240:
241: return minimum.compareTo(num) <= 0 ? num : null;
242: }
243:
244:
249: public Number getNumber()
250: {
251: return value;
252: }
253:
254: public Comparable getMinimum()
255: {
256: return minimum;
257: }
258:
259: public void setMinimum(Comparable newMinimum)
260: {
261: if (minimum != newMinimum)
262: {
263: minimum = newMinimum;
264: fireStateChanged();
265: }
266: }
267:
268: public Comparable getMaximum()
269: {
270: return maximum;
271: }
272:
273: public void setMaximum(Comparable newMaximum)
274: {
275: if (maximum != newMaximum)
276: {
277: maximum = newMaximum;
278: fireStateChanged();
279: }
280: }
281:
282: public Number getStepSize()
283: {
284: return stepSize;
285: }
286:
287: public void setStepSize(Number newStepSize)
288: {
289: if (newStepSize == null)
290: throw new IllegalArgumentException();
291:
292: if (stepSize != newStepSize)
293: {
294: stepSize = newStepSize;
295: fireStateChanged();
296: }
297: }
298: }