Class SpinningCalendarHeaderHandler

java.lang.Object
org.jdesktop.swingx.plaf.basic.CalendarHeaderHandler
org.jdesktop.swingx.plaf.basic.SpinningCalendarHeaderHandler

public class SpinningCalendarHeaderHandler extends CalendarHeaderHandler
Custom CalendarHeaderHandler which supports year-wise navigation.

The custom component used as header component of this implementation contains month-navigation buttons, a label with localized month text and a spinner for .. well ... spinning the years. There is minimal configuration control via the UIManager:

  • control the position of the nextMonth button: the default is at the trailing edge of the header. Option is to insert it directly after the month text, to enable set a Boolean.TRUE as value for key ARROWS_SURROUNDS_MONTH.
  • control the focusability of the spinner's text field: the default is false. To enable set a Boolean.TRUE as value for key FOCUSABLE_SPINNER_TEXT.
Note: this header is not used by default. To make it the per-application default register it with the UIManager, like

 UIManager.put(CalendarHeaderHandler.uiControllerID, 
      "org.jdesktop.swingx.plaf.basic.SpinningCalendarHeaderHandler");
 
 
PENDING JW: implement and bind actions for keyboard navigation. These are potentially different from navigation by mouse: need to move the selection along with the scrolling?
  • Field Details

    • ARROWS_SURROUND_MONTH

      public static final String ARROWS_SURROUND_MONTH
      Key for use in UIManager to control the position of the nextMonth arrow.
      See Also:
    • FOCUSABLE_SPINNER_TEXT

      public static final String FOCUSABLE_SPINNER_TEXT
      Key for use in UIManager to control the focusable property of the year spinner.
      See Also:
    • LOG

      private static final Logger LOG
    • yearSpinnerModel

      private SpinnerModel yearSpinnerModel
      the spinner model for year-wise navigation.
    • monthPropertyListener

      private PropertyChangeListener monthPropertyListener
      listener for property changes of the JXMonthView.
    • monthStringValue

      private FormatStringValue monthStringValue
      converter for month text.
  • Constructor Details

    • SpinningCalendarHeaderHandler

      public SpinningCalendarHeaderHandler()
  • Method Details

    • install

      public void install(JXMonthView monthView)
      Installs this handler to the given month view.

      Overridden to configure header specifics component after calling super.

      Overrides:
      install in class CalendarHeaderHandler
      Parameters:
      monthView - the target month view to install to.
    • uninstall

      public void uninstall(JXMonthView monthView)
      Uninstalls this handler from the given target month view.

      Overridden to cleanup the specifics before calling super.

      Overrides:
      uninstall in class CalendarHeaderHandler
      Parameters:
      monthView - the target month view to install from.
    • getHeaderComponent

      Returns a component to be used as header in a zoomable month view, guaranteed to be not null.

      Convenience override to the type created.

      Overrides:
      getHeaderComponent in class CalendarHeaderHandler
      Returns:
      a component to be used as header in a zoomable JXMonthView
    • createCalendarHeader

      protected SpinningCalendarHeaderHandler.SpinningCalendarHeader createCalendarHeader()
      Creates and returns the component used as header in a zoomable monthView.

      Implemented to create and configure the custom header component.

      Specified by:
      createCalendarHeader in class CalendarHeaderHandler
      Returns:
      the component used as header in a zoomable monthView, guaranteed to be not null.
    • installListeners

      protected void installListeners()
      Creates and registered listeners on the monthView as appropriate. This implementation registers a PropertyChangeListener which synchronizes internal state on changes of componentOrientation, font and monthStringBackground.

      Overrides:
      installListeners in class CalendarHeaderHandler
    • uninstallListeners

      protected void uninstallListeners()
      Unregisters listeners which had been installed to the monthView.

      Overrides:
      uninstallListeners in class CalendarHeaderHandler
    • updateFormatters

      protected void updateFormatters()
      Updates the formatter of the month text to the JXMonthView's Locale.
    • firstDisplayedDayChanged

      protected void firstDisplayedDayChanged()
      Updates internal state to monthView's firstDisplayedDay.
    • localeChanged

      protected void localeChanged()
      Updates internal state to monthView's locale.
    • getPropertyChangeListener

      private PropertyChangeListener getPropertyChangeListener()
      Returns the property change listener for use on the monthView. This is lazyly created if not yet done. This implementation listens to changes of firstDisplayedDay and locale property and updates internal state accordingly.
      Returns:
      the property change listener for the monthView, never null.
    • getYear

      private int getYear()
      Returns the current year of the monthView. Callback for spinner model. return the current year of the monthView.
    • getPreviousYear

      private int getPreviousYear()
      Returns the previous year of the monthView. Callback for spinner model.

      PENDING JW: check against lower bound. return the previous year of the monthView.

    • getNextYear

      private int getNextYear()
      Returns the next year of the monthView. Callback for spinner model.

      PENDING JW: check against upper bound. return the next year of the monthView.

    • setYear

      private boolean setYear(Object value)
      Sets the current year of the monthView to the given value. Callback for spinner model.
      Parameters:
      value - the new value of the year.
      Returns:
      a boolean indicating if a change actually happened.
    • getYearSpinnerModel

      private SpinnerModel getYearSpinnerModel()