org.jdesktop.swingx.plaf.basic
Class BasicDatePickerUI

java.lang.Object
  extended by javax.swing.plaf.ComponentUI
      extended by org.jdesktop.swingx.plaf.DatePickerUI
          extended by org.jdesktop.swingx.plaf.basic.BasicDatePickerUI

public class BasicDatePickerUI
extends DatePickerUI

The basic implementation of a DatePickerUI.


Nested Class Summary
protected  class BasicDatePickerUI.BasicDatePickerPopup
          Popup component that shows a JXMonthView component along with controlling buttons to allow traversal of the months.
 class BasicDatePickerUI.EditorCancelAction
          The wrapper for the editor cancel action.
 class BasicDatePickerUI.PopupRemover
           
 
Field Summary
protected  JXDatePicker datePicker
           
protected  MouseListener mouseListener
           
protected  MouseMotionListener mouseMotionListener
           
protected  PropertyChangeListener propertyChangeListener
           
 
Constructor Summary
BasicDatePickerUI()
           
 
Method Summary
protected  void cancel()
           
protected  void commit()
           
protected  JFormattedTextField createEditor()
          Creates the editor used to edit the date selection.
protected  ActionListener createEditorActionListener()
          Creates and returns the ActionListener for the picker's editor.
protected  PropertyChangeListener createEditorPropertyListener()
           
protected  FocusListener createFocusListener()
          Creates and returns the focuslistener for picker and editor.
protected  LayoutManager createLayoutManager()
           
protected  ActionListener createMonthViewActionListener()
          Creates and returns the ActionListener for the picker's monthView.
protected  PropertyChangeListener createMonthViewPropertyListener()
          Creates and returns the property change listener for the picker's monthView
protected  DateSelectionListener createMonthViewSelectionListener()
          Returns the listener for the dateSelection.
protected  MouseListener createMouseListener()
           
protected  MouseMotionListener createMouseMotionListener()
           
protected  JButton createPopupButton()
           
protected  PropertyChangeListener createPropertyChangeListener()
           
protected  org.jdesktop.swingx.plaf.basic.BasicDatePickerUI.TogglePopupAction createTogglePopupAction()
          Creates and returns the action which toggles the visibility of the popup.
static ComponentUI createUI(JComponent c)
           
 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.
 Dimension getMinimumSize(JComponent c)
          Returns the specified component's minimum size appropriate for the look and feel.
 Dimension getPreferredSize(JComponent c)
          Returns the specified component's preferred size appropriate for the look and feel.
 Date getSelectableDate(Date date)
          Checks the given date for validity for selection.
 void hidePopup()
          PENDING: widened access for debugging - need api to control popup visibility?
protected  void home(boolean commit)
          Navigates to linkDate.
protected  void installComponents()
           
protected  void installDefaults()
          Installs DatePicker default properties.
protected  void installKeyboardActions()
           
protected  void installLinkPanelKeyboardActions()
          Installs actions and key bindings on the datePicker's linkPanel.
protected  void installListeners()
          Creates and installs all listeners to all components.
 void installUI(JComponent c)
          Configures the specified component appropriate for the look and feel.
 boolean isPopupVisible()
           
 void toggleShowPopup()
          Toggles the popups visibility after preparing internal state.
protected  void uninstallComponents()
           
protected  void uninstallDefaults()
           
protected  void uninstallKeyboardActions()
           
protected  void uninstallLinkPanelKeyboardActions(JComponent panel)
          Uninstalls actions and key bindings from linkPanel.
protected  void uninstallListeners()
          Uninstalls and nulls all listeners which had been installed by this delegate.
 void uninstallUI(JComponent c)
          Reverses configuration which was done on the specified component during installUI.
protected  void updateEditorListeners(JFormattedTextField oldEditor)
          Wires the picker's editor related listening and actions.
protected  void updateFormatsFromTimeZone(TimeZone zone)
          Updates the picker's formats to the given TimeZone.
protected  void updateFromDateChanged()
          Updates internals after picker's date property changed.
protected  void updateFromEditableChanged()
          Updates properties which depend on the picker's editable.
protected  void updateFromEditorChanged(JFormattedTextField oldEditor, boolean updateListeners)
          Updates internals after the picker's editor property has changed.
protected  void updateFromMonthViewChanged(JXMonthView oldMonthView)
          Updates internals after the picker's monthView has changed.
protected  void updateFromSelectionChanged(DateSelectionEvent.EventType eventType, boolean adjusting)
          Updates date related properties picker/editor after a change in the monthView's selection.
protected  void updateFromSelectionModelChanged(DateSelectionModel oldModel)
          Updates internals after the selection model changed.
protected  void updateFromValueChanged(Date oldDate, Date newDate)
          Updates date related properties in picker/monthView after a change in the editor's value.
protected  void updateLinkDate()
          Updates the picker's linkDate to be in synch with monthView's today.
protected  void updateLinkPanel(JComponent oldLinkPanel)
           
protected  void updateLocale()
          Called form property listener, updates all components locale, formats etc.
protected  void updateMonthViewListeners(JXMonthView oldMonthView)
          Wires the picker's monthView related listening.
protected  void updateSelectionModelListeners(DateSelectionModel oldModel)
          Wires monthView's selection model listening.
protected  void updateTimeZone(TimeZone old)
          Updates picker's timezone dependent properties on change notification from the associated monthView.
 
Methods inherited from class javax.swing.plaf.ComponentUI
contains, getAccessibleChild, getAccessibleChildrenCount, getMaximumSize, paint, update
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

datePicker

protected JXDatePicker datePicker

propertyChangeListener

protected PropertyChangeListener propertyChangeListener

mouseListener

protected MouseListener mouseListener

mouseMotionListener

protected MouseMotionListener mouseMotionListener
Constructor Detail

BasicDatePickerUI

public BasicDatePickerUI()
Method Detail

createUI

public static ComponentUI createUI(JComponent c)

installUI

public void installUI(JComponent c)
Description copied from class: javax.swing.plaf.ComponentUI
Configures the specified component appropriate for the look and feel. This method is invoked when the ComponentUI instance is being installed as the UI delegate on the specified component. This method should completely configure the component for the look and feel, including the following:
  1. Install any default property values for color, fonts, borders, icons, opacity, etc. on the component. Whenever possible, property values initialized by the client program should not be overridden.
  2. Install a LayoutManager on the component if necessary.
  3. Create/add any required sub-components to the component.
  4. Create/install event listeners on the component.
  5. Create/install a PropertyChangeListener on the component in order to detect and respond to component property changes appropriately.
  6. Install keyboard UI (mnemonics, traversal, etc.) on the component.
  7. Initialize any appropriate instance data.

Overrides:
installUI in class ComponentUI
Parameters:
c - the component where this UI delegate is being installed
See Also:
ComponentUI.uninstallUI(javax.swing.JComponent), JComponent.setUI(javax.swing.plaf.ComponentUI), JComponent.updateUI()

uninstallUI

public void uninstallUI(JComponent c)
Description copied from class: javax.swing.plaf.ComponentUI
Reverses configuration which was done on the specified component during installUI. This method is invoked when this UIComponent instance is being removed as the UI delegate for the specified component. This method should undo the configuration performed in installUI, being careful to leave the JComponent instance in a clean state (no extraneous listeners, look-and-feel-specific property objects, etc.). This should include the following:
  1. Remove any UI-set borders from the component.
  2. Remove any UI-set layout managers on the component.
  3. Remove any UI-added sub-components from the component.
  4. Remove any UI-added event/property listeners from the component.
  5. Remove any UI-installed keyboard UI from the component.
  6. Nullify any allocated instance data objects to allow for GC.

Overrides:
uninstallUI in class ComponentUI
Parameters:
c - the component from which this UI delegate is being removed; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
See Also:
ComponentUI.installUI(javax.swing.JComponent), JComponent.updateUI()

installComponents

protected void installComponents()

uninstallComponents

protected void uninstallComponents()

installDefaults

protected void installDefaults()
Installs DatePicker default properties.


uninstallDefaults

protected void uninstallDefaults()

installKeyboardActions

protected void installKeyboardActions()

uninstallKeyboardActions

protected void uninstallKeyboardActions()

installLinkPanelKeyboardActions

protected void installLinkPanelKeyboardActions()
Installs actions and key bindings on the datePicker's linkPanel. Does nothing if the linkPanel is null. PRE: keybindings installed on picker.


uninstallLinkPanelKeyboardActions

protected void uninstallLinkPanelKeyboardActions(JComponent panel)
Uninstalls actions and key bindings from linkPanel. Does nothing if the linkPanel is null.

Parameters:
panel - the component to uninstall

installListeners

protected void installListeners()
Creates and installs all listeners to all components.


uninstallListeners

protected void uninstallListeners()
Uninstalls and nulls all listeners which had been installed by this delegate.


updateMonthViewListeners

protected void updateMonthViewListeners(JXMonthView oldMonthView)
Wires the picker's monthView related listening. Removes all listeners from the given old view and adds the listeners to the current monthView.

Parameters:
oldMonthView -

updateEditorListeners

protected void updateEditorListeners(JFormattedTextField oldEditor)
Wires the picker's editor related listening and actions. Removes listeners/actions from the old editor and adds them to the new editor.

Parameters:
oldEditor - the pickers editor before the change

updateSelectionModelListeners

protected void updateSelectionModelListeners(DateSelectionModel oldModel)
Wires monthView's selection model listening. Removes the selection listener from the old model and add to the new model.

Parameters:
oldModel - the dateSelectionModel before the change, may be null.

createEditor

protected JFormattedTextField createEditor()
Creates the editor used to edit the date selection. The editor is configured with the default DatePickerFormatter marked as UIResource.

Returns:
an instance of a JFormattedTextField

createPopupButton

protected JButton createPopupButton()

getMinimumSize

public Dimension getMinimumSize(JComponent c)
Returns the specified component's minimum size appropriate for the look and feel. If null is returned, the minimum size will be calculated by the component's layout manager instead (this is the preferred approach for any component with a specific layout manager installed). The default implementation of this method invokes getPreferredSize and returns that value.

Overrides:
getMinimumSize in class ComponentUI
Parameters:
c - the component whose minimum size is being queried; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
Returns:
a Dimension object or null
See Also:
JComponent.getMinimumSize(), LayoutManager.minimumLayoutSize(java.awt.Container), ComponentUI.getPreferredSize(javax.swing.JComponent)

getPreferredSize

public Dimension getPreferredSize(JComponent c)
Returns the specified component's preferred size appropriate for the look and feel. If null is returned, the preferred size will be calculated by the component's layout manager instead (this is the preferred approach for any component with a specific layout manager installed). The default implementation of this method returns null.

Overrides:
getPreferredSize in class ComponentUI
Parameters:
c - the component whose preferred size is being queried; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
See Also:
JComponent.getPreferredSize(), LayoutManager.preferredLayoutSize(java.awt.Container)

getBaseline

public int getBaseline(int width,
                       int height)
Description copied from class: DatePickerUI
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.

Overrides:
getBaseline in class DatePickerUI
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

getSelectableDate

public Date getSelectableDate(Date date)
                       throws PropertyVetoException
Checks the given date for validity for selection. If valid, returns the date as appropriate in the picker's context, otherwise throws a propertyVetoException. Note that the returned date might be different from the input date, f.i. the time fields might be cleared. The input date is guaranteed to be unchanged.

Specified by:
getSelectableDate in class DatePickerUI
Parameters:
date - date to check
Returns:
the date as allowed in the context of the picker.
Throws:
PropertyVetoException - if the given date is not valid for selection

updateFromDateChanged

protected void updateFromDateChanged()
Updates internals after picker's date property changed.


updateFromValueChanged

protected void updateFromValueChanged(Date oldDate,
                                      Date newDate)
Updates date related properties in picker/monthView after a change in the editor's value. Reverts the value if the new date is unselectable.

Parameters:
oldDate - the editor value before the change
newDate - the editor value after the change

updateFromSelectionChanged

protected void updateFromSelectionChanged(DateSelectionEvent.EventType eventType,
                                          boolean adjusting)
Updates date related properties picker/editor after a change in the monthView's selection. Here: does nothing if the change is intermediate. PENDNG JW: shouldn't we listen to actionEvents then?

Parameters:
eventType - the type of the selection change
adjusting - flag to indicate whether the the selection change is intermediate

updateFromMonthViewChanged

protected void updateFromMonthViewChanged(JXMonthView oldMonthView)
Updates internals after the picker's monthView has changed.

Cleans to popup. Wires the listeners. Updates date. Updates formats' timezone.

Parameters:
oldMonthView - the picker's monthView before the change, may be null.

updateFromEditorChanged

protected void updateFromEditorChanged(JFormattedTextField oldEditor,
                                       boolean updateListeners)
Updates internals after the picker's editor property has changed.

Updates the picker's children. Removes the old editor and adds the new editor. Wires the editor listeners, it the flag set. Typically, this method is called during installing the componentUI with the flag set to false and true at all other moments.

Parameters:
oldEditor - the picker's editor before the change, may be null.
updateListeners - a flag to indicate whether the listeners are ready for usage.

updateFromSelectionModelChanged

protected void updateFromSelectionModelChanged(DateSelectionModel oldModel)
Updates internals after the selection model changed.

Parameters:
oldModel - the model before the change.

updateFromEditableChanged

protected void updateFromEditableChanged()
Updates properties which depend on the picker's editable.


updateFormatsFromTimeZone

protected void updateFormatsFromTimeZone(TimeZone zone)
Updates the picker's formats to the given TimeZone.

Parameters:
zone - the timezone to set on the formats.

updateTimeZone

protected void updateTimeZone(TimeZone old)
Updates picker's timezone dependent properties on change notification from the associated monthView. PENDING JW: DatePicker needs to send notification on timezone change?

Parameters:
old - the timezone before the change.

updateLinkDate

protected void updateLinkDate()
Updates the picker's linkDate to be in synch with monthView's today.


updateLocale

protected void updateLocale()
Called form property listener, updates all components locale, formats etc.


updateLinkPanel

protected void updateLinkPanel(JComponent oldLinkPanel)
Parameters:
oldLinkPanel -

commit

protected void commit()

cancel

protected void cancel()

hidePopup

public void hidePopup()
PENDING: widened access for debugging - need api to control popup visibility?


isPopupVisible

public boolean isPopupVisible()

home

protected void home(boolean commit)
Navigates to linkDate. If commit, the linkDate is selected and committed. If not commit, the linkDate is scrolled to visible, if the monthview is open, does nothing for invisible monthView.

Parameters:
commit - boolean to indicate whether the linkDate should be selected and committed

createTogglePopupAction

protected org.jdesktop.swingx.plaf.basic.BasicDatePickerUI.TogglePopupAction createTogglePopupAction()
Creates and returns the action which toggles the visibility of the popup.

Returns:
the action which toggles the visibility of the popup.

toggleShowPopup

public void toggleShowPopup()
Toggles the popups visibility after preparing internal state.


createMonthViewPropertyListener

protected PropertyChangeListener createMonthViewPropertyListener()
Creates and returns the property change listener for the picker's monthView

Returns:
the listener for monthView properties

createFocusListener

protected FocusListener createFocusListener()
Creates and returns the focuslistener for picker and editor.

Returns:
the focusListener

createEditorActionListener

protected ActionListener createEditorActionListener()
Creates and returns the ActionListener for the picker's editor.

Returns:
the Actionlistener for the editor.

createMonthViewActionListener

protected ActionListener createMonthViewActionListener()
Creates and returns the ActionListener for the picker's monthView.

Returns:
the Actionlistener for the monthView.

createMonthViewSelectionListener

protected DateSelectionListener createMonthViewSelectionListener()
Returns the listener for the dateSelection.

Returns:
the date selection listener

createEditorPropertyListener

protected PropertyChangeListener createEditorPropertyListener()
Returns:
a propertyChangeListener listening to editor property changes

createPropertyChangeListener

protected PropertyChangeListener createPropertyChangeListener()

createLayoutManager

protected LayoutManager createLayoutManager()

createMouseListener

protected MouseListener createMouseListener()

createMouseMotionListener

protected MouseMotionListener createMouseMotionListener()