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 <= value <= 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 <= value <= 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;
}