DateFieldpublic class DateField extends Item A DateField is an editable component for presenting
date and time (calendar)
information that may be placed into a Form . Value for
this field can be
initially set or left unset. If value is not set then the UI for the field
shows this clearly. The field value for "not initialized
state" is not valid
value and getDate() for this state returns null .
Instance of a DateField can be configured to accept
date or time information
or both of them. This input mode configuration is done by
DATE , TIME or
DATE_TIME static fields of this
class. DATE input mode allows to set only
date information and TIME only time information
(hours, minutes). DATE_TIME
allows to set both clock time and date values.
In TIME input mode the date components of
Date object
must be set to the "zero epoch" value of January 1, 1970.
Calendar calculations in this field are based on default locale and defined
time zone. Because of the calculations and different input modes date object
may not contain same millisecond value when set to this field and get back
from this field. |
Fields Summary |
---|
public static final int | DATEInput mode for date information (day, month, year). With this mode this
DateField presents and allows only to modify date
value. The time
information of date object is ignored.
Value 1 is assigned to DATE . | public static final int | TIMEInput mode for time information (hours and minutes). With this mode this
DateField presents and allows only to modify
time. The date components
should be set to the "zero epoch" value of January 1, 1970 and
should not be accessed.
Value 2 is assigned to TIME . | public static final int | DATE_TIMEInput mode for date (day, month, year) and time (minutes, hours)
information. With this mode this DateField
presents and allows to modify
both time and date information.
Value 3 is assigned to DATE_TIME . | DateFieldLF | dateFieldLFThe look&feel associated with this DateField.
Set in the constructor. | boolean | initializedA flag indicating the initialization state of this DateField | int | modeThe mode of this DateField | Calendar | currentDateThe last saved date.
This is used for making the last saved date bold. |
Constructors Summary |
---|
public DateField(String label, int mode)Creates a DateField object with the specified
label and mode. This call
is identical to DateField(label, mode, null) .
this(label, mode, null);
| public DateField(String label, int mode, TimeZone timeZone)Creates a date field in which calendar calculations are based
on specific
TimeZone object and the default calendaring system for the
current locale.
The value of the DateField is initially in the
"uninitialized" state.
If timeZone is null , the system's
default time zone is used.
super(label);
synchronized (Display.LCDUILock) {
if ((mode != DATE) && (mode != TIME) && (mode != DATE_TIME)) {
throw new IllegalArgumentException("Invalid input mode");
}
this.mode = mode;
if (timeZone == null) {
timeZone = TimeZone.getDefault();
}
this.currentDate = Calendar.getInstance(timeZone);
itemLF = dateFieldLF = LFFactory.getFactory().getDateFieldLF(this);
} // synchronized
|
Methods Summary |
---|
boolean | acceptFocus()Return whether the Item takes user input focus.
return true;
| public java.util.Date | getDate()Returns date value of this field. Returned value is
null if field
value is
not initialized. The date object is constructed according the rules of
locale specific calendaring system and defined time zone.
In TIME mode field the date components are set to
the "zero
epoch" value of January 1, 1970. If a date object that presents
time beyond one day from this "zero epoch" then this field
is in "not
initialized" state and this method returns null .
In DATE mode field the time component of the calendar is
set to zero when constructing the date object.
synchronized (Display.LCDUILock) {
// NOTE:
// defensive copy of the Date object is necessary
// because CLDC's Calendar returns a reference to an internal,
// shared Date object. See bugID: 4479408.
// original:
// return (initialized ?
// new java.util.Date(currentDate.getTime().getTime()) : null);
if (initialized) {
java.util.Date retDate = dateFieldLF.lGetDate();
if (retDate == null) {
return new java.util.Date(currentDate.getTime().getTime());
} else {
return retDate;
}
}
return null;
} // synchronized
| public int | getInputMode()Gets input mode for this date field. Valid input modes are
DATE , TIME and DATE_TIME .
// SYNC NOTE: return of atomic value, no locking necessary
return mode;
| public void | setDate(java.util.Date date)Sets a new value for this field. null can be
passed to set the field
state to "not initialized" state. The input mode of
this field defines
what components of passed Date object is used.
In TIME input mode the date components must be set
to the "zero
epoch" value of January 1, 1970. If a date object that presents
time
beyond one day then this field is in "not initialized" state.
In TIME input mode the date component of
Date object is ignored and time
component is used to precision of minutes.
In DATE input mode the time component of
Date object is ignored.
In DATE_TIME input mode the date and time
component of Date are used but
only to precision of minutes.
synchronized (Display.LCDUILock) {
setDateImpl(date);
dateFieldLF.lSetDate(date);
} // synchronized
| void | setDateImpl(java.util.Date date)Sets the date.
if (date == null) {
initialized = false;
} else {
currentDate.setTime(date);
if (mode == TIME) {
if (currentDate.getTime().getTime() >= 24*60*60*1000) {
initialized = false;
} else {
currentDate.set(Calendar.YEAR, 1970);
currentDate.set(Calendar.MONTH, Calendar.JANUARY);
currentDate.set(Calendar.DATE, 1);
initialized = true;
}
} else {
// Currently spec does not prohibit from losing
// irrelevant for that mode information
// so we always zero out hours and minutes
// NOTE: the specification doesn't prohibit
// the loss of information irrelevant to
// the current input mode, so we always zero out the
// hours and minutes.
if (mode == DATE) {
currentDate.set(Calendar.HOUR, 0);
currentDate.set(Calendar.HOUR_OF_DAY, 0);
currentDate.set(Calendar.MINUTE, 0);
}
initialized = true;
}
// always ignore seconds and milliseconds
currentDate.set(Calendar.SECOND, 0);
currentDate.set(Calendar.MILLISECOND, 0);
}
| public void | setInputMode(int mode)Set input mode for this date field. Valid input modes are
DATE , TIME and DATE_TIME .
if ((mode != DATE) && (mode != TIME) && (mode != DATE_TIME)) {
throw new IllegalArgumentException("Invalid input mode");
}
synchronized (Display.LCDUILock) {
if (this.mode != mode) {
this.mode = mode;
// While the input mode is changed
// some irrelevant values for new mode could be lost.
// Currently that is allowed by the spec.
// So for TIME mode we make sure that time is set
// on a zero epoch date
// and for DATE mode we zero out hours and minutes
if (mode == TIME) {
currentDate.set(Calendar.YEAR, 1970);
currentDate.set(Calendar.MONTH, Calendar.JANUARY);
currentDate.set(Calendar.DATE, 1);
} else if (mode == DATE) {
currentDate.set(Calendar.HOUR, 0);
currentDate.set(Calendar.HOUR_OF_DAY, 0);
currentDate.set(Calendar.MINUTE, 0);
}
dateFieldLF.lSetInputMode(mode);
}
} // synchronized
|
|