javax.swing

接口
异常
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 则生成一个提前 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 调用创建子类并忽略 setCalendarField 调用。

此模型继承一个 ChangeListener。每当模型 valuecalendarFieldstartend 属性发生变化时,该 ChangeListeners 就会收到通知。

从以下版本开始:
1.4
另请参见:
JSpinner, SpinnerModel, AbstractSpinnerModel, SpinnerListModel, SpinnerNumberModel, Calendar.add(int, int)

字段摘要
 
从类 javax.swing.AbstractSpinnerModel 继承的字段
listenerList
 
构造方法摘要
SpinnerDateModel()
          构造一个 SpinnerDateModel,其初始 value 为当前日期,calendarField 等于 Calendar.DAY_OF_MONTH,且没有 start/end 限制。
SpinnerDateModel(Date value, Comparable start, Comparable end, int calendarField)
          创建一个表示 startend 之间的日期序列的 SpinnerDateModel
 
方法摘要
 int getCalendarField()
          返回由 nextValuepreviousValue 方法添加或去掉的 Calendar 字段。
 Date getDate()
          返回此 Date 序列中的当前元素。
 Comparable getEnd()
          返回序列中的最后一个 Date
 Object getNextValue()
          返回序列中的下一个 Date,如果下一个日期在 end 之后,则返回 null
 Object getPreviousValue()
          返回序列中上一个 Date,如果上一个日期是在 start 之前,则返回 null
 Comparable getStart()
          返回序列中的第一个 Date
 Object getValue()
          返回此 Date 序列中的当前元素。
 void setCalendarField(int calendarField)
          更改由 nextValuepreviousValue 方法计算的日期值更改的大小。
 void setEnd(Comparable end)
          更改此序列中 Date 的上限。
 void setStart(Comparable start)
          更改此序列中的日期下限。
 void setValue(Object value)
          设置此序列的当前 Date
 
从类 javax.swing.AbstractSpinnerModel 继承的方法
addChangeListener, fireStateChanged, getChangeListeners, getListeners, removeChangeListener
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

SpinnerDateModel

public SpinnerDateModel(Date value,
                        Comparable start,
                        Comparable end,
                        int calendarField)
创建一个表示 startend 之间的日期序列的 SpinnerDateModelnextValuepreviousValue 方法通过向前或向后调整由 calendarField 时间单位表示的当前日期 value 计算该序列的元素。有关增加或减少 Calendar field 的含义的精确描述,请参阅 java.util.Calendar 中的 add 方法。

startend 参数可以为 null,以指示该范围没有上下边界。如果 valuecalendarFieldnull,或者指定了 startend 且其值为 mininum > maximum,则抛出一个 IllegalArgumentException。同样,如果 (minimum <= value <= maximum) 为 false,则抛出一个 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 无效,或者下面的表达式为 false: (start <= value <= end)
另请参见:
Calendar.add(int, int), setValue(java.lang.Object), setStart(java.lang.Comparable), setEnd(java.lang.Comparable), setCalendarField(int)

SpinnerDateModel

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

方法详细信息

setStart

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

该属性通常是一个 Date,但是它可以使用一个具有用于 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(), setEnd(java.lang.Comparable), AbstractSpinnerModel.addChangeListener(javax.swing.event.ChangeListener)

getStart

public Comparable getStart()
返回序列中的第一个 Date

返回:
start 属性的值
另请参见:
setStart(java.lang.Comparable)

setEnd

public void setEnd(Comparable end)
更改此序列中 Date 的上限。如果 startnull,则不存在上限。此处不进行边界检查:新起始值可能会使该构造方法强制执行的 (start <= value <= end) 不变式失效。这是为了简化对该模型的更新。很自然,调用 nextValuepreviousValuesetValue 方法之前应该确保该不变式为 true。

该属性通常是一个 Date,但是它可以使用一个具有用于 DatecompareTo 方法的 Comparable。请参见 setStart 以获得一个示例。

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

参数:
end - 定义序列中的最后一个日期
另请参见:
getEnd(), setStart(java.lang.Comparable), AbstractSpinnerModel.addChangeListener(javax.swing.event.ChangeListener)

getEnd

public Comparable getEnd()
返回序列中的最后一个 Date

返回:
end 属性的值
另请参见:
setEnd(java.lang.Comparable)

setCalendarField

public void setCalendarField(int calendarField)
更改由 nextValuepreviousValue 方法计算的日期值更改的大小。 calendarField 参数必须是其中一个 Calendar 字段常量,如 Calendar.MONTHCalendar.MINUTEnextValuepreviousValue 方法使用 Calendar.add 方法将指定 Calendar 字段只向前或向后移动一个单位。要慎重使用此方法,因为有些 UI 可能在向光标下旋转字段提交编辑之前设置 calendarField。如果只希望旋转一个字段,则可以为 setCalendarField 调用创建子类并忽略 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(), getNextValue(), getPreviousValue(), Calendar.add(int, int), AbstractSpinnerModel.addChangeListener(javax.swing.event.ChangeListener)

getCalendarField

public int getCalendarField()
返回由 nextValuepreviousValue 方法添加或去掉的 Calendar 字段。

返回:
calendarField 属性的值
另请参见:
setCalendarField(int)

getNextValue

public Object getNextValue()
返回序列中的下一个 Date,如果下一个日期在 end 之后,则返回 null

指定者:
接口 SpinnerModel 中的 getNextValue
返回:
序列中的下一个 Date,如果下一个日期是在 end 之后,则返回 null
另请参见:
SpinnerModel.getNextValue(), getPreviousValue(), setCalendarField(int)

getPreviousValue

public Object getPreviousValue()
返回序列中上一个 Date,如果上一个日期是在 start 之前,则返回 null

指定者:
接口 SpinnerModel 中的 getPreviousValue
返回:
序列中上一个 Date,如果上一个日期在 start 之前,则返回 null
另请参见:
SpinnerModel.getPreviousValue(), getNextValue(), setCalendarField(int)

getDate

public Date getDate()
返回此 Date 序列中的当前元素。此方法等效于 (Date)getValue

返回:
value 属性
另请参见:
setValue(java.lang.Object)

getValue

public Object getValue()
返回此 Date 序列中的当前元素。

指定者:
接口 SpinnerModel 中的 getValue
返回:
value 属性
另请参见:
setValue(java.lang.Object), getDate()

setValue

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

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

指定者:
接口 SpinnerModel 中的 setValue
参数:
value - 此序列的当前(非 nullDate
抛出:
IllegalArgumentException - 如果值为 null 或不是一个 Date
另请参见:
getDate(), getValue(), AbstractSpinnerModel.addChangeListener(javax.swing.event.ChangeListener)