Module java.desktop
Package javax.swing

Class SpinnerNumberModel

java.lang.Object
javax.swing.AbstractSpinnerModel
javax.swing.SpinnerNumberModel
所有已实现的接口:
Serializable, SpinnerModel

public class SpinnerNumberModel extends AbstractSpinnerModel implements Serializable
用于数字序列的SpinnerModel。序列的上限和下限由名为minimummaximum的属性定义。由nextValuepreviousValue方法计算的增加或减少的大小由名为stepSize的属性定义。minimummaximum属性可以为null,表示序列没有下限或上限。此类中的所有属性都是根据两种通用类型NumberComparable定义的,以便可以容纳所有Java数值类型。在内部,仅支持类型为原始Number类型之一的值:DoubleFloatLongIntegerShortByte

要创建一个整数范围从零到一百、初始值为五十的SpinnerNumberModel,可以这样写:

 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();
 

整数和双精度数值的微调器很常见,因此为这些情况提供了特殊的构造函数。例如,要创建前面示例中的模型,也可以这样写:

 SpinnerNumberModel model = new SpinnerNumberModel(50, 0, 100, 1);
 

此模型继承了一个ChangeListener。当模型的valuestepSizeminimummaximum属性更改时,将通知ChangeListeners

自版本:
1.4
参见:
  • Constructor Details

    • SpinnerNumberModel

      public SpinnerNumberModel(Number value, Comparable<?> minimum, Comparable<?> maximum, Number stepSize)
      构造一个代表从minimummaximum的闭合数字序列的SpinnerModel。通过nextValuepreviousValue方法,通过分别添加或减去stepSize来计算序列的元素。所有参数必须是相互Comparable的,valuestepSize必须是IntegerLongFloatDouble的实例。

      minimummaximum参数可以为null,表示范围没有上限或下限。如果valuestepSizenull,或者如果指定了minimummaximumminimum > maximum,则会抛出IllegalArgumentException。类似地,如果(minimum <= value <= maximum)为false,则会抛出IllegalArgumentException

      参数:
      value - 模型的当前(非null)值
      minimum - 序列中的第一个数字或null
      maximum - 序列中的最后一个数字或null
      stepSize - 序列元素之间的差异
      抛出:
      IllegalArgumentException - 如果stepSizevaluenull,或者如果以下表达式为false: minimum <= value <= maximum
    • SpinnerNumberModel

      public SpinnerNumberModel(int value, int minimum, int maximum, int stepSize)
      构造一个SpinnerNumberModel,具有指定的valueminimum/maximum边界和stepSize
      参数:
      value - 模型的当前值
      minimum - 序列中的第一个数字
      maximum - 序列中的最后一个数字
      stepSize - 序列元素之间的差异
      抛出:
      IllegalArgumentException - 如果以下表达式为false: minimum <= value <= maximum
    • SpinnerNumberModel

      public SpinnerNumberModel(double value, double minimum, double maximum, double stepSize)
      构造一个SpinnerNumberModel,具有指定的valueminimum/maximum边界和stepSize
      参数:
      value - 模型的当前值
      minimum - 序列中的第一个数字
      maximum - 序列中的最后一个数字
      stepSize - 序列元素之间的差异
      抛出:
      IllegalArgumentException - 如果以下表达式为false: minimum <= value <= maximum
    • SpinnerNumberModel

      public SpinnerNumberModel()
      构造一个SpinnerNumberModel,没有minimummaximum值,stepSize等于一,初始值为零。
  • Method Details

    • setMinimum

      public void setMinimum(Comparable<?> minimum)
      更改此序列中数字的下限。如果minimumnull,则没有下限。此处不执行任何边界检查;新的minimum值可能会使构造函数强制执行的(minimum <= value <= maximum)不变性无效。这是为了简化更新模型,自然地,在调用getNextValuegetPreviousValuesetValue方法之前,应确保不变性为真。

      通常,此属性是与value相同类型的Number,但也可以使用任何具有compareTo方法的Comparable,该方法用于与与值相同类型的Number进行比较。例如,如果值是Long,则minimum可能是这样定义的日期子类:

       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));
           }
       }
       

      如果minimum已更改,则此方法会触发ChangeEvent

      参数:
      minimum - 一个具有compareTo方法的Comparable,用于与value相同类型的Number进行比较
      参见:
    • getMinimum

      public Comparable<?> getMinimum()
      返回此序列中的第一个数字。
      返回:
      minimum属性的值
      参见:
    • setMaximum

      public void setMaximum(Comparable<?> maximum)
      更改此序列中数字的上限。如果maximumnull,则没有上限。此处不执行任何边界检查;新的maximum值可能会使构造函数强制执行的(minimum <= value < maximum)不变性无效。这是为了简化更新模型,自然地,在调用nextprevioussetValue方法之前,应确保不变性为真。

      通常,此属性是与value相同类型的Number,但也可以使用任何具有compareTo方法的Comparable,该方法用于与与值相同类型的Number进行比较。有关示例,请参见setMinimum(Comparable)

      如果maximum已更改,则此方法会触发ChangeEvent

      参数:
      maximum - 一个Comparable,具有与value相同类型的NumbercompareTo方法
      参见:
    • getMaximum

      public Comparable<?> getMaximum()
      返回序列中的最后一个数字。
      返回:
      maximum属性的值
      参见:
    • setStepSize

      public void setStepSize(Number stepSize)
      更改由getNextValuegetPreviousValue方法计算的值更改的大小。如果stepSizenull,则会抛出IllegalArgumentException

      如果stepSize已更改,则此方法会触发ChangeEvent

      参数:
      stepSize - 由getNextValuegetPreviousValue方法计算的值更改的大小
      参见:
    • getStepSize

      public Number getStepSize()
      返回由getNextValuegetPreviousValue方法计算的值更改的大小。
      返回:
      stepSize属性的值
      参见:
    • getNextValue

      public Object getNextValue()
      返回序列中的下一个数字。
      指定者:
      getNextValue 在接口 SpinnerModel
      返回:
      value + stepSize,如果总和超过maximum则返回null
      参见:
    • getPreviousValue

      public Object getPreviousValue()
      返回序列中的上一个数字。
      指定者:
      getPreviousValue 在接口 SpinnerModel
      返回:
      value - stepSize,如果总和小于minimum则返回null
      参见:
    • getNumber

      public Number getNumber()
      返回序列中当前元素的值。
      返回:
      值属性
      参见:
    • getValue

      public Object getValue()
      返回序列中当前元素的值。
      指定者:
      getValue 在接口 SpinnerModel
      返回:
      值属性
      参见:
    • setValue

      public void setValue(Object value)
      设置此序列的当前值。如果valuenull或不是Number,则会抛出IllegalArgumentException。此处不进行边界检查;新值可能会使由构造函数强制执行的(minimum <= value <= maximum)不变式无效。还可以将值设置为不会自然出现在序列中的值,即不是stepSize的模数。这是为了简化更新模型,并适应不希望限制用户直接输入的微调器的值。当然,在调用nextprevioussetValue方法之前,应确保(minimum <= value <= maximum)不变式为真。

      如果值已更改,则此方法会触发ChangeEvent

      指定者:
      setValue 在接口 SpinnerModel
      参数:
      value - 此序列的当前(非nullNumber
      抛出:
      IllegalArgumentException - 如果valuenull或不是Number
      参见: