Module java.desktop
Package javax.swing

Class SpinnerDateModel

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

public class SpinnerDateModel extends AbstractSpinnerModel implements Serializable
用于Date序列的SpinnerModel。序列的上限和下限由名为startend的属性定义,nextValuepreviousValue方法计算的增加或减少的大小由名为calendarField的属性定义。 startend属性可以为null,表示序列没有下限或上限。

calendarField属性的值必须是指定Calendar中的字段的java.util.Calendar常量之一。 getNextValuegetPreviousValue方法按照此数量向前或向后更改日期。例如,如果calendarFieldCalendar.DAY_OF_WEEK,那么nextValue会产生比当前value晚24小时的Date,而previousValue会产生比当前value早24小时的Date

calendarField的合法值为:

  • Calendar.ERA
  • Calendar.YEAR
  • Calendar.MONTH
  • Calendar.WEEK_OF_YEAR
  • Calendar.WEEK_OF_MONTH
  • Calendar.DAY_OF_MONTH
  • Calendar.DAY_OF_YEAR
  • Calendar.DAY_OF_WEEK
  • Calendar.DAY_OF_WEEK_IN_MONTH
  • Calendar.AM_PM
  • Calendar.HOUR
  • Calendar.HOUR_OF_DAY
  • Calendar.MINUTE
  • Calendar.SECOND
  • Calendar.MILLISECOND
但是,某些UI可能在提交编辑之前设置calendarField以旋转光标下的字段。如果您只想旋转一个字段,可以创建子类并忽略setCalendarField调用。

此模型继承了ChangeListener。每当模型的valuecalendarFieldstartend属性更改时,都会通知ChangeListeners

自:
1.4
参见:
  • Constructor Details

    • SpinnerDateModel

      public SpinnerDateModel(Date value, Comparable<Date> start, Comparable<Date> end, int calendarField)
      创建一个代表startend之间日期序列的SpinnerDateModelnextValuepreviousValue方法通过将当前日期valuecalendarField时间单位向前或向后推进来计算序列的元素。有关增加或减少Calendar field的确切描述,请参阅java.util.Calendar中的add方法。

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

      参数:
      value - 模型的当前(非null)值
      start - 序列中的第一个日期或null
      end - 序列中的最后一个日期或null
      calendarField - 以下之一
      • Calendar.ERA
      • Calendar.YEAR
      • Calendar.MONTH
      • Calendar.WEEK_OF_YEAR
      • Calendar.WEEK_OF_MONTH
      • Calendar.DAY_OF_MONTH
      • Calendar.DAY_OF_YEAR
      • Calendar.DAY_OF_WEEK
      • Calendar.DAY_OF_WEEK_IN_MONTH
      • Calendar.AM_PM
      • Calendar.HOUR
      • Calendar.HOUR_OF_DAY
      • Calendar.MINUTE
      • Calendar.SECOND
      • Calendar.MILLISECOND
      抛出:
      IllegalArgumentException - 如果valuecalendarFieldnull,如果calendarField无效,或者如果以下表达式为假: (start <= value <= end)
      参见:
    • SpinnerDateModel

      public SpinnerDateModel()
      构造一个SpinnerDateModel,其初始value为当前日期,calendarField等于Calendar.DAY_OF_MONTH,并且没有start/end限制。
  • Method Details

    • setStart

      public void setStart(Comparable<Date> start)
      更改此序列中日期的下限。如果startnull,则没有下限。此处不执行边界检查: 新的开始值可能会使构造函数强制执行的(start <= value <= end)不变式无效。这是为了简化更新模型。自然地,在调用nextValuepreviousValuesetValue方法之前,应确保不变式为真。

      通常,此属性是一个Date,但也可以使用具有compareTo方法的Comparable来表示日期。例如,start可能是以下类的实例:

       MyStartDate implements Comparable {
           long t = 12345;
           public int compareTo(Date d) {
                  return (t < d.getTime() ? -1 : (t == d.getTime() ? 0 : 1));
           }
           public int compareTo(Object o) {
                  return compareTo((Date)o);
           }
       }
       
      请注意,如果传递给compareTo(Object)Object不是Date,则上述示例将抛出ClassCastException

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

      参数:
      start - 定义序列中的第一个日期
      参见:
    • getStart

      public Comparable<Date> getStart()
      返回序列中的第一个Date
      返回:
      start属性的值
      参见:
    • setEnd

      public void setEnd(Comparable<Date> end)
      更改此序列中日期的上限。如果startnull,则没有上限。此处不执行边界检查: 新的开始值可能会使构造函数强制执行的(start <= value <= end)不变式无效。这是为了简化更新模型。自然地,在调用nextValuepreviousValuesetValue方法之前,应确保不变式为真。

      通常,此属性是一个Date,但也可以使用具有compareTo方法的Comparable来表示日期。有关DateComparable的使用,请参见setStart的示例。

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

      参数:
      end - 定义序列中的最后一个日期
      参见:
    • getEnd

      public Comparable<Date> getEnd()
      返回序列中的最后一个Date
      返回:
      end 属性的值
      参见:
    • setCalendarField

      public void setCalendarField(int calendarField)
      更改由nextValuepreviousValue方法计算的日期值更改的大小。 calendarField参数必须是Calendar字段常量之一,如Calendar.MONTHCalendar.MINUTEnextValuepreviousValue方法只是使用Calendar.add方法将指定的Calendar字段向前或向后移动一个单位。 您应谨慎使用此方法,因为某些UI可能会在提交编辑之前设置calendarField以在光标下的字段旋转。 如果您只想旋转一个字段,可以创建子类并忽略setCalendarField调用。
      参数:
      calendarField - 其中之一
      • Calendar.ERA
      • Calendar.YEAR
      • Calendar.MONTH
      • Calendar.WEEK_OF_YEAR
      • Calendar.WEEK_OF_MONTH
      • Calendar.DAY_OF_MONTH
      • Calendar.DAY_OF_YEAR
      • Calendar.DAY_OF_WEEK
      • Calendar.DAY_OF_WEEK_IN_MONTH
      • Calendar.AM_PM
      • Calendar.HOUR
      • Calendar.HOUR_OF_DAY
      • Calendar.MINUTE
      • Calendar.SECOND
      • Calendar.MILLISECOND

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

      参见:
    • getCalendarField

      public int getCalendarField()
      返回由nextValuepreviousValue方法添加或减去的Calendar字段。
      返回:
      calendarField属性的值
      参见:
    • getNextValue

      public Object getNextValue()
      返回序列中的下一个Date,如果下一个日期在end之后则返回null
      指定者:
      getNextValue 在接口 SpinnerModel
      返回:
      序列中的下一个Date,如果下一个日期在end之后则返回null
      参见:
    • getPreviousValue

      public Object getPreviousValue()
      返回序列中的前一个Date,如果前一个日期在start之前则返回null
      指定者:
      getPreviousValue 在接口 SpinnerModel
      返回:
      序列中的前一个Date,如果前一个日期在start之前则返回null
      参见:
    • getDate

      public Date getDate()
      返回此Date序列中的当前元素。此方法等效于(Date)getValue
      返回:
      value属性
      参见:
    • getValue

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

      public void setValue(Object value)
      设置此序列的当前Date。如果valuenull,则会抛出IllegalArgumentException。 这里不进行边界检查:新值可能会使构造函数强制执行的(start <= value < end)不变式无效。 当然,在调用nextValuepreviousValuesetValue方法之前,应确保(start <= value <= maximum)不变式为真。

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

      指定者:
      setValue 在接口 SpinnerModel
      参数:
      value - 此序列的当前(非nullDate
      抛出:
      IllegalArgumentException - 如果值为null或不是Date
      参见: