Class 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 Detail

      • ARROWS_SURROUND_MONTH

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

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

        private static final java.util.logging.Logger LOG
      • yearSpinnerModel

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

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

        private FormatStringValue monthStringValue
        converter for month text.
    • Constructor Detail

      • SpinningCalendarHeaderHandler

        public SpinningCalendarHeaderHandler()
    • Method Detail

      • 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.
      • 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
      • 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 java.beans.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​(java.lang.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 javax.swing.SpinnerModel getYearSpinnerModel()