src/share/classes/javax/swing/SpinnerNumberModel.java

Print this page

        

*** 82,92 **** */ @SuppressWarnings("serial") // Superclass is not serializable across versions public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializable { private Number stepSize, value; ! private Comparable minimum, maximum; /** * Constructs a <code>SpinnerModel</code> that represents * a closed sequence of --- 82,101 ---- */ @SuppressWarnings("serial") // Superclass is not serializable across versions public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializable { private Number stepSize, value; ! // Both minimum and maximum are logically Comparable<? extends ! // Number>, but that type is awkward to use since different ! // instances of Number are not naturally Comparable. For example, ! // a Double implements Comparable<Double> and an Integer ! // implements Comparable<Integer>. Neither Integer nor Double will ! // have a bridge method for Comparable<Number>. However, it safe ! // to cast Comparable<?> to Comparable<Object> since all ! // Comparables will have a compare(Object> method, possibly as a ! // bridge. ! private Comparable<?> minimum, maximum; /** * Constructs a <code>SpinnerModel</code> that represents * a closed sequence of
*** 115,130 **** * * @throws IllegalArgumentException if stepSize or value is * <code>null</code> or if the following expression is false: * <code>minimum &lt;= value &lt;= maximum</code> */ ! public SpinnerNumberModel(Number value, Comparable minimum, Comparable maximum, Number stepSize) { if ((value == null) || (stepSize == null)) { throw new IllegalArgumentException("value and stepSize must be non-null"); } ! if (!(((minimum == null) || (minimum.compareTo(value) <= 0)) && ! ((maximum == null) || (maximum.compareTo(value) >= 0)))) { throw new IllegalArgumentException("(minimum <= value <= maximum) is false"); } this.value = value; this.minimum = minimum; this.maximum = maximum; --- 124,143 ---- * * @throws IllegalArgumentException if stepSize or value is * <code>null</code> or if the following expression is false: * <code>minimum &lt;= value &lt;= maximum</code> */ ! @SuppressWarnings("unchecked") // Casts to Comparable<Object> ! public SpinnerNumberModel(Number value, ! Comparable<?> minimum, ! Comparable<?> maximum, ! Number stepSize) { if ((value == null) || (stepSize == null)) { throw new IllegalArgumentException("value and stepSize must be non-null"); } ! if (!(((minimum == null) || (((Comparable<Object>)minimum).compareTo(value) <= 0)) && ! ((maximum == null) || (((Comparable<Object>)maximum).compareTo(value) >= 0)))) { throw new IllegalArgumentException("(minimum <= value <= maximum) is false"); } this.value = value; this.minimum = minimum; this.maximum = maximum;
*** 210,220 **** * the same type as <code>value</code> * @see #getMinimum * @see #setMaximum * @see SpinnerModel#addChangeListener */ ! public void setMinimum(Comparable minimum) { if ((minimum == null) ? (this.minimum != null) : !minimum.equals(this.minimum)) { this.minimum = minimum; fireStateChanged(); } } --- 223,233 ---- * the same type as <code>value</code> * @see #getMinimum * @see #setMaximum * @see SpinnerModel#addChangeListener */ ! public void setMinimum(Comparable<?> minimum) { if ((minimum == null) ? (this.minimum != null) : !minimum.equals(this.minimum)) { this.minimum = minimum; fireStateChanged(); } }
*** 224,234 **** * Returns the first number in this sequence. * * @return the value of the <code>minimum</code> property * @see #setMinimum */ ! public Comparable getMinimum() { return minimum; } /** --- 237,247 ---- * Returns the first number in this sequence. * * @return the value of the <code>minimum</code> property * @see #setMinimum */ ! public Comparable<?> getMinimum() { return minimum; } /**
*** 257,267 **** * the same type as <code>value</code> * @see #getMaximum * @see #setMinimum * @see SpinnerModel#addChangeListener */ ! public void setMaximum(Comparable maximum) { if ((maximum == null) ? (this.maximum != null) : !maximum.equals(this.maximum)) { this.maximum = maximum; fireStateChanged(); } } --- 270,280 ---- * the same type as <code>value</code> * @see #getMaximum * @see #setMinimum * @see SpinnerModel#addChangeListener */ ! public void setMaximum(Comparable<?> maximum) { if ((maximum == null) ? (this.maximum != null) : !maximum.equals(this.maximum)) { this.maximum = maximum; fireStateChanged(); } }
*** 271,281 **** * Returns the last number in the sequence. * * @return the value of the <code>maximum</code> property * @see #setMaximum */ ! public Comparable getMaximum() { return maximum; } /** --- 284,294 ---- * Returns the last number in the sequence. * * @return the value of the <code>maximum</code> property * @see #setMaximum */ ! public Comparable<?> getMaximum() { return maximum; } /**
*** 315,325 **** */ public Number getStepSize() { return stepSize; } ! private Number incrValue(int dir) { Number newValue; if ((value instanceof Float) || (value instanceof Double)) { double v = value.doubleValue() + (stepSize.doubleValue() * (double)dir); --- 328,338 ---- */ public Number getStepSize() { return stepSize; } ! @SuppressWarnings("unchecked") // Casts to Comparable<Object> private Number incrValue(int dir) { Number newValue; if ((value instanceof Float) || (value instanceof Double)) { double v = value.doubleValue() + (stepSize.doubleValue() * (double)dir);
*** 327,338 **** newValue = new Double(v); } else { newValue = new Float(v); } ! } ! else { long v = value.longValue() + (stepSize.longValue() * (long)dir); if (value instanceof Long) { newValue = Long.valueOf(v); } --- 340,350 ---- newValue = new Double(v); } else { newValue = new Float(v); } ! } else { long v = value.longValue() + (stepSize.longValue() * (long)dir); if (value instanceof Long) { newValue = Long.valueOf(v); }
*** 345,358 **** else { newValue = Byte.valueOf((byte)v); } } ! if ((maximum != null) && (maximum.compareTo(newValue) < 0)) { return null; } ! if ((minimum != null) && (minimum.compareTo(newValue) > 0)) { return null; } else { return newValue; } --- 357,370 ---- else { newValue = Byte.valueOf((byte)v); } } ! if ((maximum != null) && (((Comparable<Object>)maximum).compareTo(newValue) < 0)) { return null; } ! if ((minimum != null) && (((Comparable<Object>)minimum).compareTo(newValue) > 0)) { return null; } else { return newValue; }