org.jdesktop.swingx
Class JXDatePicker

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by org.jdesktop.swingx.JXDatePicker
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable

public class JXDatePicker
extends JComponent

A component that combines a button, an editable field and a JXMonthView component. The user can select a date from the calendar component, which appears when the button is pressed. The selection from the calendar component will be displayed in editable field. Values may also be modified manually by entering a date into the editable field using one of the supported date formats.

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
static String CANCEL_KEY
          action command used for cancel actionEvent.
static String COMMIT_KEY
          action command used for commit actionEvent.
static String DATE_IN_MILLIS
           
static String EDITOR
           
static String HOME_COMMIT_KEY
          action key for commit home action
static String HOME_NAVIGATE_KEY
          action key for navigate home action
protected  boolean lightWeightPopupEnabled
           
static String LINK_PANEL
           
static String MONTH_VIEW
           
static String uiClassID
          UI Class ID
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
JXDatePicker()
          Create a new date picker using the current date as the initial selection and the default abstract formatter JXDatePickerFormatter.
JXDatePicker(long millis)
          Create a new date picker using the specified time as the initial selection and the default abstract formatter JXDatePickerFormatter.
 
Method Summary
 void addActionListener(ActionListener l)
          Adds an ActionListener.
 void cancelEdit()
          Cancels the editor's changes and notifies ActionListeners.
 void commitEdit()
          Commits the editor's changes and notifies ActionListeners.
protected  void fireActionPerformed()
          Fires an ActionEvent with this picker's actionCommand to all listeners.
protected  void fireActionPerformed(String actionCommand)
          Fires an ActionEvent with the given actionCommand to all listeners.
 String getActionCommand()
          Returns the string currently used to identiy fired ActionEvents.
 int getBaseline(int width, int height)
          Get the baseline for the specified component, or a value less than 0 if the baseline can not be determined.
 Date getDate()
          Returns the currently selected date.
 long getDateInMillis()
          Returns the currently selected date in milliseconds.
 JFormattedTextField getEditor()
          Returns the formatted text field used to edit the date selection.
 Font getFont()
          Returns the font that is associated with the editor of this date picker.
 DateFormat[] getFormats()
          Returns an array of the formats used by the installed formatter if it is a subclass of JXDatePickerFormatter.
 long getLinkDate()
           
 JPanel getLinkPanel()
          Return the panel that is used at the bottom of the popup.
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
          Returns an array of all the objects currently registered as FooListeners upon this JComponent.
 JXMonthView getMonthView()
          Return the JXMonthView used in the popup to select dates from.
 TimeZone getTimeZone()
          Gets the time zone.
 DatePickerUI getUI()
          Returns the look and feel (L&F) object that renders this component.
 String getUIClassID()
          Returns the UIDefaults key used to look up the name of the swing.plaf.ComponentUI class that defines the look and feel for this component.
 boolean isEditable()
          Returns the editable property.
 boolean isEditValid()
          Returns true if the current value being edited is valid.
 boolean isLightWeightPopupEnabled()
          Gets the value of the lightWeightPopupEnabled property.
 void postActionEvent()
          Deprecated. use cancelEdit() and commitEdit() instead
 void removeActionListener(ActionListener l)
          Removes an ActionListener.
 void setActionCommand(String actionCommand)
          Sets the string used to identify fired ActionEvents.
 void setComponentOrientation(ComponentOrientation orientation)
          Sets the language-sensitive orientation that is to be used to order the elements or text within this component.
 void setDate(Date date)
          Sets the date property.
 void setDateInMillis(long millis)
          Set the currently selected date.
 void setEditable(boolean value)
          Sets the editable property.
 void setEditor(JFormattedTextField editor)
          Sets the editor.
 void setFont(Font font)
          Set the font for the editor associated with this date picker.
 void setFormats(DateFormat... formats)
          Replaces the currently installed formatter and factory used by the editor.
 void setFormats(String... formats)
          Replaces the currently installed formatter and factory used by the editor.
 void setLightWeightPopupEnabled(boolean aFlag)
          Sets the lightWeightPopupEnabled property, which provides a hint as to whether or not a lightweight Component should be used to contain the JXDatePicker, versus a heavyweight Component such as a Panel or a Window.
 void setLinkDate(long linkDate)
          PENDING JW ...
 void setLinkDate(long linkDate, String linkFormatString)
          Set the date the link will use and the string defining a MessageFormat to format the link.
 void setLinkPanel(JPanel linkPanel)
          Set the panel that will be used at the bottom of the popup.
 void setMonthView(JXMonthView monthView)
          Set the component to use the specified JXMonthView.
 void setTimeZone(TimeZone tz)
          Sets the time zone with the given time zone value.
 void setUI(DatePickerUI ui)
          Sets the L&F object that renders this component.
 void updateUI()
          Resets the UI property with the value from the current look and feel.
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

uiClassID

public static final String uiClassID
UI Class ID

See Also:
Constant Field Values

EDITOR

public static final String EDITOR
See Also:
Constant Field Values

MONTH_VIEW

public static final String MONTH_VIEW
See Also:
Constant Field Values

DATE_IN_MILLIS

public static final String DATE_IN_MILLIS
See Also:
Constant Field Values

LINK_PANEL

public static final String LINK_PANEL
See Also:
Constant Field Values

COMMIT_KEY

public static final String COMMIT_KEY
action command used for commit actionEvent.

See Also:
Constant Field Values

CANCEL_KEY

public static final String CANCEL_KEY
action command used for cancel actionEvent.

See Also:
Constant Field Values

HOME_NAVIGATE_KEY

public static final String HOME_NAVIGATE_KEY
action key for navigate home action

See Also:
Constant Field Values

HOME_COMMIT_KEY

public static final String HOME_COMMIT_KEY
action key for commit home action

See Also:
Constant Field Values

lightWeightPopupEnabled

protected boolean lightWeightPopupEnabled
Constructor Detail

JXDatePicker

public JXDatePicker()
Create a new date picker using the current date as the initial selection and the default abstract formatter JXDatePickerFormatter.

The date picker is configured with the default time zone and locale

See Also:
setTimeZone(java.util.TimeZone), getTimeZone()

JXDatePicker

public JXDatePicker(long millis)
Create a new date picker using the specified time as the initial selection and the default abstract formatter JXDatePickerFormatter.

The date picker is configured with the default time zone and locale

Parameters:
millis - initial time in milliseconds
See Also:
setTimeZone(java.util.TimeZone), getTimeZone()
Method Detail

setDate

public void setDate(Date date)
Sets the date property.

Does nothing if the ui vetos the new date - as might happen if the code tries to set a date which is unselectable in the monthView's context. The actual value of the new Date might be changed by the ui, the default implementation cleans the Date by zeroing all time components.

At all "stable" (= not editing in date input field nor in the monthView) times the date is the same in the JXMonthView, this JXDatePicker and the editor. If a new Date is set, this invariant is enforce by the DatePickerUI.

A not null default value is set on instantiation. This is a bound property.

Parameters:
date - the new date to set.
See Also:
getDate()

setDateInMillis

public void setDateInMillis(long millis)
Set the currently selected date.

Parameters:
millis - milliseconds

getDate

public Date getDate()
Returns the currently selected date.

Returns:
Date

getDateInMillis

public long getDateInMillis()
Returns the currently selected date in milliseconds.

Returns:
the date in milliseconds, -1 if there is no selection.

getUI

public DatePickerUI getUI()
Returns the look and feel (L&F) object that renders this component.

Returns:
the DatePickerUI object that renders this component

setUI

public void setUI(DatePickerUI ui)
Sets the L&F object that renders this component.

Parameters:
ui - UI to use for this JXDatePicker

updateUI

public void updateUI()
Resets the UI property with the value from the current look and feel.

Overrides:
updateUI in class JComponent
See Also:
UIManager.getUI(javax.swing.JComponent)

getUIClassID

public String getUIClassID()
Description copied from class: javax.swing.JComponent
Returns the UIDefaults key used to look up the name of the swing.plaf.ComponentUI class that defines the look and feel for this component. Most applications will never need to call this method. Subclasses of JComponent that support pluggable look and feel should override this method to return a UIDefaults key that maps to the ComponentUI subclass that defines their look and feel.

Overrides:
getUIClassID in class JComponent
Returns:
the UIDefaults key for a ComponentUI subclass
See Also:
UIDefaults.getUI(javax.swing.JComponent)

setFormats

public void setFormats(String... formats)
Replaces the currently installed formatter and factory used by the editor. These string formats are defined by the java.text.SimpleDateFormat class.

Parameters:
formats - zero or more not null string formats to use. Note that a null array is allowed and resets the formatter to use the localized default formats.
Throws:
NullPointerException - any array element is null.
See Also:
SimpleDateFormat

setFormats

public void setFormats(DateFormat... formats)
Replaces the currently installed formatter and factory used by the editor.

Parameters:
formats - zero or more not null formats to use. Note that a null array is allowed and resets the formatter to use the localized default formats.
Throws:
NullPointerException - any of its elements is null.

getFormats

public DateFormat[] getFormats()
Returns an array of the formats used by the installed formatter if it is a subclass of JXDatePickerFormatter. javax.swing.JFormattedTextField.AbstractFormatter and javax.swing.text.DefaultFormatter do not have support for accessing the formats used.

Returns:
array of formats guaranteed to be not null, but might be empty.

getMonthView

public JXMonthView getMonthView()
Return the JXMonthView used in the popup to select dates from.

Returns:
the month view component

setMonthView

public void setMonthView(JXMonthView monthView)
Set the component to use the specified JXMonthView. If the new JXMonthView is configured to a different time zone it will affect the time zone of this component.

Parameters:
monthView - month view comopnent.
Throws:
NullPointerException - if view component is null
See Also:
setTimeZone(java.util.TimeZone), getTimeZone()

getTimeZone

public TimeZone getTimeZone()
Gets the time zone. This is a convenience method which returns the time zone of the JXMonthView being used.

Returns:
The TimeZone used by the JXMonthView.

setTimeZone

public void setTimeZone(TimeZone tz)
Sets the time zone with the given time zone value. This is a convenience method which returns the time zone of the JXMonthView being used.

Parameters:
tz - The TimeZone.

getLinkDate

public long getLinkDate()

setLinkDate

public void setLinkDate(long linkDate,
                        String linkFormatString)
Set the date the link will use and the string defining a MessageFormat to format the link. If no valid date is in the editor when the popup is displayed the popup will focus on the month the linkDate is in. Calling this method will replace the currently installed linkPanel and install a new one with the requested date and format.

Parameters:
linkDate - Date in milliseconds
linkFormatString - String used to format the link
See Also:
MessageFormat

setLinkDate

public void setLinkDate(long linkDate)
PENDING JW ... quick api hack for testing.

Parameters:
linkDate -

getLinkPanel

public JPanel getLinkPanel()
Return the panel that is used at the bottom of the popup. The default implementation shows a link that displays the current month.

Returns:
The currently installed link panel

setLinkPanel

public void setLinkPanel(JPanel linkPanel)
Set the panel that will be used at the bottom of the popup. PENDING JW: why insist on JPanel? JComponent would be enough?

Parameters:
linkPanel - The new panel to install in the popup

getEditor

public JFormattedTextField getEditor()
Returns the formatted text field used to edit the date selection.

Clients should NOT use this method. It is provided to temporarily support the PLAF code.

Returns:
the formatted text field

setEditor

public void setEditor(JFormattedTextField editor)
Sets the editor.

The default is created and set by the UI delegate.

Clients should NOT use this method. It is provided to temporarily support the PLAF code.

Parameters:
editor - the formatted input.
Throws:
NullPointerException - if editor is null.
See Also:
getEditor()

setComponentOrientation

public void setComponentOrientation(ComponentOrientation orientation)
Description copied from class: java.awt.Component
Sets the language-sensitive orientation that is to be used to order the elements or text within this component. Language-sensitive LayoutManager and Component subclasses will use this property to determine how to lay out and draw components.

At construction time, a component's orientation is set to ComponentOrientation.UNKNOWN, indicating that it has not been specified explicitly. The UNKNOWN orientation behaves the same as ComponentOrientation.LEFT_TO_RIGHT.

To set the orientation of a single component, use this method. To set the orientation of an entire component hierarchy, use applyComponentOrientation.

Overrides:
setComponentOrientation in class Component
See Also:
ComponentOrientation

isEditValid

public boolean isEditValid()
Returns true if the current value being edited is valid.

Returns:
true if the current value being edited is valid.

commitEdit

public void commitEdit()
                throws ParseException
Commits the editor's changes and notifies ActionListeners. Forces the current value to be taken from the AbstractFormatter and set as the current value. This has no effect if there is no current AbstractFormatter installed.

Throws:
ParseException - Throws parse exception if the date can not be parsed.

cancelEdit

public void cancelEdit()
Cancels the editor's changes and notifies ActionListeners.


setEditable

public void setEditable(boolean value)
Sets the editable property. If false, ...? The default value is true.

Parameters:
value -
See Also:
isEditable()

isEditable

public boolean isEditable()
Returns the editable property.

Returns:
true if the picker is editable; false otherwise

getFont

public Font getFont()
Returns the font that is associated with the editor of this date picker.

Specified by:
getFont in interface MenuContainer
Overrides:
getFont in class Component
Returns:
this component's font; if a font has not been set for this component, the font of its parent is returned
See Also:
Component.setFont(java.awt.Font)

setFont

public void setFont(Font font)
Set the font for the editor associated with this date picker.

Overrides:
setFont in class JComponent
Parameters:
font - the desired Font for this component
See Also:
Component.getFont()

setLightWeightPopupEnabled

public void setLightWeightPopupEnabled(boolean aFlag)
Sets the lightWeightPopupEnabled property, which provides a hint as to whether or not a lightweight Component should be used to contain the JXDatePicker, versus a heavyweight Component such as a Panel or a Window. The decision of lightweight versus heavyweight is ultimately up to the JXDatePicker. Lightweight windows are more efficient than heavyweight windows, but lightweight and heavyweight components do not mix well in a GUI. If your application mixes lightweight and heavyweight components, you should disable lightweight popups. The default value for the lightWeightPopupEnabled property is true, unless otherwise specified by the look and feel. Some look and feels always use heavyweight popups, no matter what the value of this property.

See the article Mixing Heavy and Light Components on The Swing Connection This method fires a property changed event.

Parameters:
aFlag - if true, lightweight popups are desired

isLightWeightPopupEnabled

public boolean isLightWeightPopupEnabled()
Gets the value of the lightWeightPopupEnabled property.

Returns:
the value of the lightWeightPopupEnabled property
See Also:
setLightWeightPopupEnabled(boolean)

getBaseline

public int getBaseline(int width,
                       int height)
Get the baseline for the specified component, or a value less than 0 if the baseline can not be determined. The baseline is measured from the top of the component.

Parameters:
width - Width of the component to determine baseline for.
height - Height of the component to determine baseline for.
Returns:
baseline for the specified component

getActionCommand

public String getActionCommand()
Returns the string currently used to identiy fired ActionEvents.

Returns:
String The string used for identifying ActionEvents.

setActionCommand

public void setActionCommand(String actionCommand)
Sets the string used to identify fired ActionEvents.

Parameters:
actionCommand - The string used for identifying ActionEvents.

addActionListener

public void addActionListener(ActionListener l)
Adds an ActionListener.

The ActionListener will receive an ActionEvent when a selection has been made.

Parameters:
l - The ActionListener that is to be notified

removeActionListener

public void removeActionListener(ActionListener l)
Removes an ActionListener.

Parameters:
l - The action listener to remove.

getListeners

public <T extends EventListener> T[] getListeners(Class<T> listenerType)
Description copied from class: javax.swing.JComponent
Returns an array of all the objects currently registered as FooListeners upon this JComponent. FooListeners are registered using the addFooListener method.

You can specify the listenerType argument with a class literal, such as FooListener.class. For example, you can query a JComponent c for its mouse listeners with the following code:

MouseListener[] mls = (MouseListener[])(c.getListeners(MouseListener.class));
If no such listeners exist, this method returns an empty array.

Overrides:
getListeners in class JComponent
Parameters:
listenerType - the type of listeners requested; this parameter should specify an interface that descends from java.util.EventListener
Returns:
an array of all objects registered as FooListeners on this component, or an empty array if no such listeners have been added
See Also:
JComponent.getVetoableChangeListeners(), JComponent.getAncestorListeners()

fireActionPerformed

protected void fireActionPerformed()
Fires an ActionEvent with this picker's actionCommand to all listeners.


fireActionPerformed

protected void fireActionPerformed(String actionCommand)
Fires an ActionEvent with the given actionCommand to all listeners.


postActionEvent

@Deprecated
public void postActionEvent()
Deprecated. use cancelEdit() and commitEdit() instead