Package org.jdesktop.swingx.plaf.basic
Class BasicDatePickerUI
- java.lang.Object
-
- javax.swing.plaf.ComponentUI
-
- org.jdesktop.swingx.plaf.DatePickerUI
-
- org.jdesktop.swingx.plaf.basic.BasicDatePickerUI
-
public class BasicDatePickerUI extends DatePickerUI
The basic implementation of aDatePickerUI
.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
BasicDatePickerUI.BasicDatePickerPopup
Popup component that shows a JXMonthView component along with controlling buttons to allow traversal of the months.private class
BasicDatePickerUI.DefaultEditor
A subclass of JFormattedTextField which calculates a "reasonable" minimum preferred size, independent of value/text.class
BasicDatePickerUI.EditorCancelAction
The wrapper for the editor cancel action.private class
BasicDatePickerUI.Handler
PENDING: JW - I really hate the one-in-all.class
BasicDatePickerUI.PopupRemover
private class
BasicDatePickerUI.TogglePopupAction
Action used to commit the current value in the JFormattedTextField.
-
Field Summary
Fields Modifier and Type Field Description protected JXDatePicker
datePicker
private java.awt.event.ActionListener
editorActionListener
private BasicDatePickerUI.EditorCancelAction
editorCancelAction
private java.beans.PropertyChangeListener
editorPropertyListener
private java.awt.event.FocusListener
focusListener
private BasicDatePickerUI.Handler
handler
private static java.util.logging.Logger
LOG
private java.awt.event.ActionListener
monthViewActionListener
private java.beans.PropertyChangeListener
monthViewPropertyListener
private DateSelectionListener
monthViewSelectionListener
listeners for the picker's monthviewprotected java.awt.event.MouseListener
mouseListener
protected java.awt.event.MouseMotionListener
mouseMotionListener
private BasicDatePickerUI.BasicDatePickerPopup
popup
private javax.swing.JButton
popupButton
private javax.swing.event.PopupMenuListener
popupMenuListener
private BasicDatePickerUI.PopupRemover
popupRemover
protected java.beans.PropertyChangeListener
propertyChangeListener
-
Constructor Summary
Constructors Constructor Description BasicDatePickerUI()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
cancel()
protected void
commit()
private javax.swing.Action
createCancelAction()
Creates and returns the action for cancel the picker's edit.private javax.swing.Action
createCommitAction()
Creates and returns the action for committing the picker's input.protected javax.swing.JFormattedTextField
createEditor()
Creates the editor used to edit the date selection.protected java.awt.event.ActionListener
createEditorActionListener()
Creates and returns the ActionListener for the picker's editor.protected java.beans.PropertyChangeListener
createEditorPropertyListener()
protected java.awt.event.FocusListener
createFocusListener()
Creates and returns the focuslistener for picker and editor.private javax.swing.Action
createHomeAction(boolean commit)
protected java.awt.LayoutManager
createLayoutManager()
protected java.awt.event.ActionListener
createMonthViewActionListener()
Creates and returns the ActionListener for the picker's monthView.private BasicDatePickerUI.BasicDatePickerPopup
createMonthViewPopup()
protected java.beans.PropertyChangeListener
createMonthViewPropertyListener()
Creates and returns the property change listener for the picker's monthViewprotected DateSelectionListener
createMonthViewSelectionListener()
Returns the listener for the dateSelection.protected java.awt.event.MouseListener
createMouseListener()
protected java.awt.event.MouseMotionListener
createMouseMotionListener()
protected javax.swing.JButton
createPopupButton()
protected javax.swing.event.PopupMenuListener
createPopupMenuListener()
Creates and returns a PopupMenuListener.protected java.beans.PropertyChangeListener
createPropertyChangeListener()
protected BasicDatePickerUI.TogglePopupAction
createTogglePopupAction()
Creates and returns the action which toggles the visibility of the popup.static javax.swing.plaf.ComponentUI
createUI(javax.swing.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.private java.text.DateFormat[]
getCustomFormats(javax.swing.JFormattedTextField editor)
Checks and returns custom formats on the editor, if any.private BasicDatePickerUI.Handler
getHandler()
Lazily creates and returns the shared all-mighty listener of everythingjava.awt.Dimension
getMinimumSize(javax.swing.JComponent c)
protected javax.swing.event.PopupMenuListener
getPopupMenuListener()
Returns the PopupMenuListener for the MonthView popup.java.awt.Dimension
getPreferredSize(javax.swing.JComponent c)
java.util.Date
getSelectableDate(java.util.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.protected void
installPopup()
Creates the popup and registers the popup listener.void
installUI(javax.swing.JComponent c)
boolean
isPopupVisible()
private void
revertValue(java.util.Date oldDate)
PENDING: currently this resets at once - but it's a no-no, because it happens during notificationprivate void
setActionEnabled(java.lang.String key, boolean enabled)
void
toggleShowPopup()
Toggles the popups visibility after preparing internal state.protected void
uninstallComponents()
protected void
uninstallDefaults()
private void
uninstallEditorListeners(javax.swing.JFormattedTextField oldEditor)
Uninstalls all listeners and actions which have been installed by this delegate from the given editor.protected void
uninstallKeyboardActions()
protected void
uninstallLinkPanelKeyboardActions(javax.swing.JComponent panel)
Uninstalls actions and key bindings from linkPanel.protected void
uninstallListeners()
Uninstalls and nulls all listeners which had been installed by this delegate.protected void
uninstallPopup()
Removes the popup listener from the popup and null it, if it was not null.void
uninstallUI(javax.swing.JComponent c)
private void
updateChildLocale(java.util.Locale locale)
protected void
updateEditorListeners(javax.swing.JFormattedTextField oldEditor)
Wires the picker's editor related listening and actions.private void
updateEditorProperties()
Synchronizes the properties of the current editor to the properties of the JXDatePicker.private void
updateEditorValue()
Sets the editor value to the model's selectedDate.private void
updateFormatLocale(java.util.Locale locale)
protected void
updateFormatsFromTimeZone(java.util.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(javax.swing.JFormattedTextField oldEditor, boolean updateListeners)
Updates internals after the picker's editor property has changed.protected void
updateFromEnabledChanged()
Update properties which depend on the picker's enabled.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(java.util.Date oldDate, java.util.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(javax.swing.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(java.util.TimeZone old)
Updates picker's timezone dependent properties on change notification from the associated monthView.
-
-
-
Field Detail
-
LOG
private static final java.util.logging.Logger LOG
-
datePicker
protected JXDatePicker datePicker
-
popupButton
private javax.swing.JButton popupButton
-
popup
private BasicDatePickerUI.BasicDatePickerPopup popup
-
handler
private BasicDatePickerUI.Handler handler
-
propertyChangeListener
protected java.beans.PropertyChangeListener propertyChangeListener
-
focusListener
private java.awt.event.FocusListener focusListener
-
mouseListener
protected java.awt.event.MouseListener mouseListener
-
mouseMotionListener
protected java.awt.event.MouseMotionListener mouseMotionListener
-
editorActionListener
private java.awt.event.ActionListener editorActionListener
-
editorCancelAction
private BasicDatePickerUI.EditorCancelAction editorCancelAction
-
editorPropertyListener
private java.beans.PropertyChangeListener editorPropertyListener
-
monthViewSelectionListener
private DateSelectionListener monthViewSelectionListener
listeners for the picker's monthview
-
monthViewActionListener
private java.awt.event.ActionListener monthViewActionListener
-
monthViewPropertyListener
private java.beans.PropertyChangeListener monthViewPropertyListener
-
popupRemover
private BasicDatePickerUI.PopupRemover popupRemover
-
popupMenuListener
private javax.swing.event.PopupMenuListener popupMenuListener
-
-
Method Detail
-
createUI
public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent c)
-
installUI
public void installUI(javax.swing.JComponent c)
- Overrides:
installUI
in classjavax.swing.plaf.ComponentUI
-
uninstallUI
public void uninstallUI(javax.swing.JComponent c)
- Overrides:
uninstallUI
in classjavax.swing.plaf.ComponentUI
-
installComponents
protected void installComponents()
-
getCustomFormats
private java.text.DateFormat[] getCustomFormats(javax.swing.JFormattedTextField editor)
Checks and returns custom formats on the editor, if any.- Parameters:
editor
- the editor to check- Returns:
- the custom formats uses in the editor or null if it had used defaults as defined in the datepicker properties
-
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(javax.swing.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(javax.swing.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
-
uninstallEditorListeners
private void uninstallEditorListeners(javax.swing.JFormattedTextField oldEditor)
Uninstalls all listeners and actions which have been installed by this delegate from the given editor.- Parameters:
oldEditor
- the editor to uninstall.
-
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 javax.swing.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 javax.swing.JButton createPopupButton()
-
getMinimumSize
public java.awt.Dimension getMinimumSize(javax.swing.JComponent c)
- Overrides:
getMinimumSize
in classjavax.swing.plaf.ComponentUI
-
getPreferredSize
public java.awt.Dimension getPreferredSize(javax.swing.JComponent c)
- Overrides:
getPreferredSize
in classjavax.swing.plaf.ComponentUI
-
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 classDatePickerUI
- 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 java.util.Date getSelectableDate(java.util.Date date) throws java.beans.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 classDatePickerUI
- Parameters:
date
- date to check- Returns:
- the date as allowed in the context of the picker.
- Throws:
java.beans.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(java.util.Date oldDate, java.util.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 changenewDate
- the editor value after the change
-
revertValue
private void revertValue(java.util.Date oldDate)
PENDING: currently this resets at once - but it's a no-no, because it happens during notification- Parameters:
oldDate
- the old date to revert to
-
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 changeadjusting
- 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(javax.swing.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.
-
updateEditorProperties
private void updateEditorProperties()
Synchronizes the properties of the current editor to the properties of the JXDatePicker.
-
updateFromSelectionModelChanged
protected void updateFromSelectionModelChanged(DateSelectionModel oldModel)
Updates internals after the selection model changed.- Parameters:
oldModel
- the model before the change.
-
updateEditorValue
private void updateEditorValue()
Sets the editor value to the model's selectedDate.
-
updateFromEditableChanged
protected void updateFromEditableChanged()
Updates properties which depend on the picker's editable.
-
updateFromEnabledChanged
protected void updateFromEnabledChanged()
Update properties which depend on the picker's enabled.
-
setActionEnabled
private void setActionEnabled(java.lang.String key, boolean enabled)
- Parameters:
key
-enabled
-
-
updateFormatsFromTimeZone
protected void updateFormatsFromTimeZone(java.util.TimeZone zone)
Updates the picker's formats to the given TimeZone.- Parameters:
zone
- the timezone to set on the formats.
-
updateTimeZone
protected void updateTimeZone(java.util.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.
-
updateFormatLocale
private void updateFormatLocale(java.util.Locale locale)
-
updateChildLocale
private void updateChildLocale(java.util.Locale locale)
-
updateLinkPanel
protected void updateLinkPanel(javax.swing.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
-
createCommitAction
private javax.swing.Action createCommitAction()
Creates and returns the action for committing the picker's input.- Returns:
-
createCancelAction
private javax.swing.Action createCancelAction()
Creates and returns the action for cancel the picker's edit.- Returns:
-
createHomeAction
private javax.swing.Action createHomeAction(boolean commit)
-
createTogglePopupAction
protected 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.
-
installPopup
protected void installPopup()
Creates the popup and registers the popup listener. All internal methods must use this method instead of calling createPopup directly.
-
uninstallPopup
protected void uninstallPopup()
Removes the popup listener from the popup and null it, if it was not null. All internal popup removal/replacement must use this method instead of nulling directly.
-
getPopupMenuListener
protected javax.swing.event.PopupMenuListener getPopupMenuListener()
Returns the PopupMenuListener for the MonthView popup. Lazily created.- Returns:
- the popupuMenuListener to install on the popup
-
createPopupMenuListener
protected javax.swing.event.PopupMenuListener createPopupMenuListener()
Creates and returns a PopupMenuListener. PENDING JW: the listener management assumes a stateless implementation relative to the popup/picker. Custom implementations should take care to not keep any references.- Returns:
-
createMonthViewPopup
private BasicDatePickerUI.BasicDatePickerPopup createMonthViewPopup()
-
createMonthViewPropertyListener
protected java.beans.PropertyChangeListener createMonthViewPropertyListener()
Creates and returns the property change listener for the picker's monthView- Returns:
- the listener for monthView properties
-
createFocusListener
protected java.awt.event.FocusListener createFocusListener()
Creates and returns the focuslistener for picker and editor.- Returns:
- the focusListener
-
createEditorActionListener
protected java.awt.event.ActionListener createEditorActionListener()
Creates and returns the ActionListener for the picker's editor.- Returns:
- the Actionlistener for the editor.
-
createMonthViewActionListener
protected java.awt.event.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 java.beans.PropertyChangeListener createEditorPropertyListener()
- Returns:
- a propertyChangeListener listening to editor property changes
-
getHandler
private BasicDatePickerUI.Handler getHandler()
Lazily creates and returns the shared all-mighty listener of everything- Returns:
- the shared listener.
-
createPropertyChangeListener
protected java.beans.PropertyChangeListener createPropertyChangeListener()
-
createLayoutManager
protected java.awt.LayoutManager createLayoutManager()
-
createMouseListener
protected java.awt.event.MouseListener createMouseListener()
-
createMouseMotionListener
protected java.awt.event.MouseMotionListener createMouseMotionListener()
-
-