org.jdesktop.swingx.plaf.basic
Class BasicMonthViewUI

java.lang.Object
  extended by javax.swing.plaf.ComponentUI
      extended by org.jdesktop.swingx.plaf.MonthViewUI
          extended by org.jdesktop.swingx.plaf.basic.BasicMonthViewUI

public class BasicMonthViewUI
extends MonthViewUI

Base implementation of the JXMonthView UI.

Note: The api changed considerably between releases 0.9.4 and 0.9.5.

The general drift of the change was to delegate all text rendering to a dedicated rendering controller (currently named RenderingHandler), similar to the collection view rendering. The UI itself keeps layout and positioning of the rendering components. Plus updating on property changes received from the monthView.

Painting: coordinate systems.

On the road to "zoomable" date range views (Vista-style).

Added support (doesn't do anything yet, zoom-logic must yet be defined) by way of an active calendar header which is added to the monthView if zoomable. It is disabled by default. In this mode, the view is always traversable and shows exactly one calendar. It is orthogonal to the classic mode, that is client code should not be effected in any way as long as the mode is not explicitly enabled.

NOTE to LAF implementors: the active calendar header is very, very, very raw and sure to change without much notice. Better not yet to support it right now.


Nested Class Summary
protected static class BasicMonthViewUI.RenderingHandler
          Empty subclass for backward compatibility.
 
Field Summary
protected  Rectangle calendarGrid
          The bounding box of the grid of visible months.
protected static int DAY_HEADER_ROW
           
protected static int DAYS_IN_WEEK
           
protected static int FIRST_DAY_COLUMN
           
protected static int FIRST_WEEK_ROW
           
protected  boolean isLeftToRight
           
protected static int LAST_DAY_COLUMN
           
protected static int LAST_WEEK_ROW
           
static int MONTH_DOWN
          Return value used to identify when the month down button is pressed.
static int MONTH_UP
          Return value used to identify when the month up button is pressed.
protected  Icon monthDownImage
           
protected  String[] monthsOfTheYear
          Deprecated. pre-0.9.6 no longer used in paint/layout with renderer.
protected  Icon monthUpImage
           
protected  JXMonthView monthView
          the component we are installed for.
protected static int WEEK_HEADER_COLUMN
           
protected static int WEEKS_IN_MONTH
           
 
Constructor Summary
BasicMonthViewUI()
           
 
Method Summary
protected  CalendarHeaderHandler createCalendarHeaderHandler()
          Creates and returns a calendar header handler which provides and configures a component for use in a zoomable monthView.
protected  Font createDerivedFont()
          Deprecated. KEEP re-added usage in preliminary zoomable support no longer used in paint/layout with renderer.
protected  LayoutManager createLayoutManager()
           
protected  MouseListener createMouseListener()
           
protected  MouseMotionListener createMouseMotionListener()
           
protected  PropertyChangeListener createPropertyChangeListener()
           
protected  CalendarRenderingHandler createRenderingHandler()
          Returns the CalendarRenderingHandler to use.
static ComponentUI createUI(JComponent c)
           
protected  Calendar getCalendar()
          Returns the monthViews calendar configured to the firstDisplayedDate.
protected  Calendar getCalendar(Date date)
          Returns the monthViews calendar configured to the given time.
protected  CalendarHeaderHandler getCalendarHeaderHandler()
           
 Date getDayAtLocation(int x, int y)
          Returns the Date at the given location.
protected  Rectangle getDayBounds(Date date)
          Returns the bounds of the given day.
protected  Rectangle getDayBoundsAtLocation(int x, int y)
          Returns the bounds of the day in the grid of days which contains the given location.
protected  Rectangle getDayBoundsInMonth(Date month, int row, int column)
          Returns the bounds of the day box at logical coordinates in the given month.
protected  Point getDayGridPosition(Date date)
          Returns the given date's position in the grid of the month it is contained in.
protected  Point getDayGridPositionAtLocation(int x, int y)
          Returns the logical coordinates of the day which contains the given location.
protected  Date getDayInMonth(Date month, int row, int column)
          Returns the Date defined by the logical grid coordinates relative to the given month.
protected  Dimension getDaySize()
          Returns the size of a day including the padding.
 String[] getDaysOfTheWeek()
          Returns an array of String to use as names for the days of the week.
protected  Date getFirstDisplayedDay()
          Returns the first displayed day.
protected  int getFirstDisplayedMonth()
           
protected  int getFirstDisplayedYear()
           
protected  CalendarHeaderHandler getHeaderFromUIManager()
          Returns a CalendarHeaderHandler looked up in the UIManager.
 Date getLastDisplayedDay()
          Returns the last possible date that can be displayed.
protected  Date getMonth(int row, int column)
          Returns the Date representing the start of the month at the given logical position in the grid of months.
protected  Date getMonthAtLocation(int x, int y)
          Returns the Date representing the start of the month which contains the given location.
protected  Rectangle getMonthBounds(Date date)
          Returns the bounds of the month containing the given date.
protected  Rectangle getMonthBounds(int row, int column)
          Returns the bounds of the month at the given logical coordinates in the grid of visible months.
protected  Rectangle getMonthBoundsAtLocation(int x, int y)
          Returns the bounds of the month which contains the given location.
protected  Rectangle getMonthDetailsBoundsAtLocation(int x, int y)
          Returns the bounds of the month details which contains the given location.
protected  Point getMonthGridPosition(Date date)
          Returns the logical grid position of the month containing the given date.
protected  Point getMonthGridPositionAtLocation(int x, int y)
          Returns the logical coordinates of the month which contains the given location.
protected  Rectangle getMonthHeaderBounds(Date date, boolean includeInsets)
          Returns the bounds of the month containing the given date.
protected  Rectangle getMonthHeaderBoundsAtLocation(int x, int y)
          Returns the bounds of the month header which contains the given location.
protected  int getMonthHeaderHeight()
          Returns the height of the month header.
protected  Dimension getMonthSize()
          Returns the size of a month.
protected  CalendarRenderingHandler getRenderingHandler()
           
protected  SortedSet<Date> getSelection()
           
protected  Date getToday()
           
protected  int getTraversableGridPositionAtLocation(int x, int y)
          Mapping pixel to bounds.
protected  int getWeeks(Calendar month)
          Returns the number of weeks to paint in the current month, as represented by the given calendar.
protected  void installComponents()
          Creates and installs the calendar header handler.
protected  void installDefaults()
          Installs default values.
protected  void installDelegate()
          Installs this ui delegate's properties.
protected  void installKeyboardActions()
           
protected  void installListeners()
           
protected  void installRenderingHandler()
          Creates and installs the renderingHandler and infrastructure to use it.
 void installUI(JComponent c)
          Installs the component as appropriate for the current lf.
protected  boolean isToday(Date date)
          Returns true if the date passed in is the same as today.
protected  boolean isUIInstallable(Object property)
          Deprecated. pre-0.9.6 use SwingXUtilities.isUIInstallable(Object)
 boolean isUsingKeyboard()
           
protected  boolean isZoomable()
           
 void paint(Graphics g, JComponent c)
          Paints the specified component appropriate for the look and feel.
protected  void paintBackground(Graphics g)
          Paints the background of the component.
protected  void paintDayHeader(Graphics g, Calendar month)
          Paints the day column header.
protected  void paintDayOfMonth(Graphics g, Rectangle bounds, Calendar calendar, CalendarState state)
          Paints a day which is of the current month with the given state.
protected  void paintDays(Graphics g, Calendar month)
          Paints the days of the given month.
protected  void paintDaysOfWeekSeparator(Graphics g, Calendar month)
          Paints the separator between column header (days of week) and days.
protected  void paintMonth(Graphics g, Calendar month)
          Paints the month represented by the given Calendar.
protected  void paintMonthHeader(Graphics g, Calendar month)
          Paints the header of a month.
protected  void paintWeekHeader(Graphics g, Calendar month)
          Paints the day column header.
protected  void paintWeekOfYearSeparator(Graphics g, Calendar month)
          Paints the separator between row header (weeks of year) and days.
protected  void setCalendarHeaderHandler(CalendarHeaderHandler calendarHeaderHandler)
           
protected  void setFirstDisplayedDay(Date firstDisplayedDay)
          Updates internal state that depends on the MonthView's firstDisplayedDay property.
protected  void setRenderingHandler(CalendarRenderingHandler renderingHandler)
           
 void setUsingKeyboard(boolean val)
           
protected  void uninstallComponents()
          Uninstalls the calendar header handler.
protected  void uninstallDefaults()
           
protected  void uninstallKeyboardActions()
           
protected  void uninstallListeners()
           
protected  void uninstallRenderingHandler()
          Uninstalls the renderingHandler and infrastructure that used it.
 void uninstallUI(JComponent c)
          Reverses configuration which was done on the specified component during installUI.
 void update(Graphics g, JComponent c)
          Overridden to extract the background painting for ease-of-use of subclasses.
protected  void updateComponentInputMap()
          Binds/clears the keystrokes in the component input map, based on the monthView's componentInputMap enabled property.
protected  void updateLocale(boolean revalidate)
          Updates internal state according to monthView's locale.
protected  void updateZoomable()
          Updates state after the monthView's zoomable property has been changed.
 
Methods inherited from class javax.swing.plaf.ComponentUI
contains, getAccessibleChild, getAccessibleChildrenCount, getBaseline, getBaselineResizeBehavior, getMaximumSize, getMinimumSize, getPreferredSize
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MONTH_DOWN

public static final int MONTH_DOWN
Return value used to identify when the month down button is pressed.

See Also:
Constant Field Values

MONTH_UP

public static final int MONTH_UP
Return value used to identify when the month up button is pressed.

See Also:
Constant Field Values

WEEK_HEADER_COLUMN

protected static final int WEEK_HEADER_COLUMN
See Also:
Constant Field Values

DAYS_IN_WEEK

protected static final int DAYS_IN_WEEK
See Also:
Constant Field Values

FIRST_DAY_COLUMN

protected static final int FIRST_DAY_COLUMN
See Also:
Constant Field Values

LAST_DAY_COLUMN

protected static final int LAST_DAY_COLUMN
See Also:
Constant Field Values

DAY_HEADER_ROW

protected static final int DAY_HEADER_ROW
See Also:
Constant Field Values

WEEKS_IN_MONTH

protected static final int WEEKS_IN_MONTH
See Also:
Constant Field Values

FIRST_WEEK_ROW

protected static final int FIRST_WEEK_ROW
See Also:
Constant Field Values

LAST_WEEK_ROW

protected static final int LAST_WEEK_ROW
See Also:
Constant Field Values

monthsOfTheYear

@Deprecated
protected String[] monthsOfTheYear
Deprecated. pre-0.9.6 no longer used in paint/layout with renderer.
localized names of all months. protected for testing only! PENDING: JW - should be property on JXMonthView, for symmetry with daysOfTheWeek?


monthView

protected JXMonthView monthView
the component we are installed for.


isLeftToRight

protected boolean isLeftToRight

monthUpImage

protected Icon monthUpImage

monthDownImage

protected Icon monthDownImage

calendarGrid

protected Rectangle calendarGrid
The bounding box of the grid of visible months.

Constructor Detail

BasicMonthViewUI

public BasicMonthViewUI()
Method Detail

createUI

public static ComponentUI createUI(JComponent c)

installUI

public void installUI(JComponent c)
Installs the component as appropriate for the current lf. PENDING JW: clarify sequence of installXX methods.

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()
Creates and installs the calendar header handler.


uninstallComponents

protected void uninstallComponents()
Uninstalls the calendar header handler.


installDefaults

protected void installDefaults()
Installs default values.

This is refactored to only install default properties on the monthView. Extracted install of this delegate's properties into installDelegate.


installDelegate

protected void installDelegate()
Installs this ui delegate's properties.


isUIInstallable

@Deprecated
protected boolean isUIInstallable(Object property)
Deprecated. pre-0.9.6 use SwingXUtilities.isUIInstallable(Object)

Checks and returns whether the given property should be replaced by the UI's default value.

Parameters:
property - the property to check.
Returns:
true if the given property should be replaced by the UI#s default value, false otherwise.

uninstallDefaults

protected void uninstallDefaults()

installKeyboardActions

protected void installKeyboardActions()

uninstallKeyboardActions

protected void uninstallKeyboardActions()

installListeners

protected void installListeners()

uninstallListeners

protected void uninstallListeners()

installRenderingHandler

protected void installRenderingHandler()
Creates and installs the renderingHandler and infrastructure to use it.


uninstallRenderingHandler

protected void uninstallRenderingHandler()
Uninstalls the renderingHandler and infrastructure that used it.


createRenderingHandler

protected CalendarRenderingHandler createRenderingHandler()
Returns the CalendarRenderingHandler to use. Subclasses may override to plug-in custom implementations.

This implementation returns an instance of RenderingHandler.

Returns:
the endering handler to use for painting, must not be null

setRenderingHandler

protected void setRenderingHandler(CalendarRenderingHandler renderingHandler)
Parameters:
renderingHandler - the renderingHandler to set

getRenderingHandler

protected CalendarRenderingHandler getRenderingHandler()
Returns:
the renderingHandler

updateComponentInputMap

protected void updateComponentInputMap()
Binds/clears the keystrokes in the component input map, based on the monthView's componentInputMap enabled property.

See Also:
JXMonthView.isComponentInputMapEnabled()

updateLocale

protected void updateLocale(boolean revalidate)
Updates internal state according to monthView's locale. Revalidates the monthView if the boolean parameter is true.

Parameters:
revalidate - a boolean indicating whether the monthView should be revalidated after the change.

getDaysOfTheWeek

public String[] getDaysOfTheWeek()
Description copied from class: MonthViewUI
Returns an array of String to use as names for the days of the week.

Specified by:
getDaysOfTheWeek in class MonthViewUI
Returns:
array of names for the days of the week.

createPropertyChangeListener

protected PropertyChangeListener createPropertyChangeListener()

createLayoutManager

protected LayoutManager createLayoutManager()

createMouseListener

protected MouseListener createMouseListener()

createMouseMotionListener

protected MouseMotionListener createMouseMotionListener()

isUsingKeyboard

public boolean isUsingKeyboard()

setUsingKeyboard

public void setUsingKeyboard(boolean val)

getDayBoundsAtLocation

protected Rectangle getDayBoundsAtLocation(int x,
                                           int y)
Returns the bounds of the day in the grid of days which contains the given location. The bounds are in monthView screen coordinate system.

Note: this is a pure geometric mapping. The returned rectangle need not necessarily map to a date in the month which contains the location, it can represent a week-number/column header or a leading/trailing date.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the bounds of the day which contains the location, or null if outside

getDayBoundsInMonth

protected Rectangle getDayBoundsInMonth(Date month,
                                        int row,
                                        int column)
Returns the bounds of the day box at logical coordinates in the given month. The row's range is from DAY_HEADER_ROW to LAST_WEEK_ROW. Column's range is from WEEK_HEADER_COLUMN to LAST_DAY_COLUMN.

Parameters:
month - the month containing the day box
row - the logical row (== week) coordinate in the day grid
column - the logical column (== day) coordinate in the day grid
Returns:
the bounds of the daybox or null if not showing
Throws:
IllegalArgumentException - if row or column are out off range.
See Also:
getDayGridPositionAtLocation(int, int)

getDayGridPositionAtLocation

protected Point getDayGridPositionAtLocation(int x,
                                             int y)
Returns the logical coordinates of the day which contains the given location. The p.x of the returned value represents the week header or the day of week, ranging from WEEK_HEADER_COLUMN to LAST_DAY_COLUMN. The p.y represents the day header or week of the month, ranging from DAY_HEADER_ROW to LAST_WEEK_ROW. The transformation takes care of ComponentOrientation.

Note: The returned grid position need not necessarily map to a date in the month which contains the location, it can represent a week-number/column header or a leading/trailing date.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the logical coordinates of the day in the grid of days in a month or null if outside.
See Also:
getDayBoundsInMonth(Date, int, int)

getDayInMonth

protected Date getDayInMonth(Date month,
                             int row,
                             int column)
Returns the Date defined by the logical grid coordinates relative to the given month. May be null if the logical coordinates represent a header in the day grid or is outside of the given month. Mapping logical day grid coordinates to Date.

PENDING JW: relax the startOfMonth pre? Why did I require it?

Parameters:
month - a calendar representing the first day of the month, must not be null.
row - the logical row index in the day grid of the month
column - the logical column index in the day grid of the month
Returns:
the day at the logical grid coordinates in the given month or null if the coordinates are day/week header or leading/trailing dates
Throws:
IllegalStateException - if the month is not the start of the month.
See Also:
getDayGridPosition(Date)

getDayGridPosition

protected Point getDayGridPosition(Date date)
Returns the given date's position in the grid of the month it is contained in.

Parameters:
date - the Date to get the logical position for, must not be null.
Returns:
the logical coordinates of the day in the grid of days in a month or null if the Date is not visible.
See Also:
getDayInMonth(Date, int, int)

getDayAtLocation

public Date getDayAtLocation(int x,
                             int y)
Returns the Date at the given location. May be null if the coordinates don't map to a day in the month which contains the coordinates. Specifically: hitting leading/trailing dates returns null. Mapping pixel to calendar day.

Specified by:
getDayAtLocation in class MonthViewUI
Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the day at the given location or null if the location doesn't map to a day in the month which contains the coordinates.
See Also:
getDayBounds(Date)

getDayBounds

protected Rectangle getDayBounds(Date date)
Returns the bounds of the given day. The bounds are in monthView coordinate system.

PENDING JW: this most probably should be public as it is the logical reverse of getDayAtLocation

Parameters:
date - the Date to return the bounds for. Must not be null.
Returns:
the bounds of the given date or null if not visible.
See Also:
getDayAtLocation(int, int)

getTraversableGridPositionAtLocation

protected int getTraversableGridPositionAtLocation(int x,
                                                   int y)
Mapping pixel to bounds.

PENDING JW: define the "action grid". Currently this replaces the old version to remove all internal usage of deprecated methods.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the bounds of the active header area in containing the location or null if outside.

getMonthHeaderBoundsAtLocation

protected Rectangle getMonthHeaderBoundsAtLocation(int x,
                                                   int y)
Returns the bounds of the month header which contains the given location. The bounds are in monthView coordinate system.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the bounds of the month which contains the location, or null if outside

getMonthDetailsBoundsAtLocation

protected Rectangle getMonthDetailsBoundsAtLocation(int x,
                                                    int y)
Returns the bounds of the month details which contains the given location. The bounds are in monthView coordinate system.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the bounds of the details grid in the month at location or null if outside.

getMonthBoundsAtLocation

protected Rectangle getMonthBoundsAtLocation(int x,
                                             int y)
Returns the bounds of the month which contains the given location. The bounds are in monthView coordinate system.

Mapping pixel to bounds.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the bounds of the month which contains the location, or null if outside

getMonthGridPositionAtLocation

protected Point getMonthGridPositionAtLocation(int x,
                                               int y)
Returns the logical coordinates of the month which contains the given location. The p.x of the returned value represents the column, the p.y represents the row the month is shown in. The transformation takes care of ComponentOrientation.

Mapping pixel to logical grid coordinates.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the logical coordinates of the month in the grid of month shown by this monthView or null if outside.

getMonthAtLocation

protected Date getMonthAtLocation(int x,
                                  int y)
Returns the Date representing the start of the month which contains the given location.

Mapping pixel to calendar day.

Parameters:
x - the x position of the location in pixel
y - the y position of the location in pixel
Returns:
the start of the month which contains the given location or null if the location is outside the grid of months.

getMonth

protected Date getMonth(int row,
                        int column)
Returns the Date representing the start of the month at the given logical position in the grid of months.

Mapping logical grid coordinates to Calendar.

Parameters:
row - the rowIndex in the grid of months.
column - the columnIndex in the grid months.
Returns:
a Date representing the start of the month at the given logical coordinates.
See Also:
getMonthGridPosition(Date)

getMonthGridPosition

protected Point getMonthGridPosition(Date date)
Returns the logical grid position of the month containing the given date. The Point's x value is the column in the grid of months, the y value is the row in the grid of months. Mapping Date to logical grid position, this is the reverse of getMonth(int, int).

Parameters:
date - the Date to return the bounds for. Must not be null.
Returns:
the postion of the month that contains the given date or null if not visible.
See Also:
getMonth(int, int), getMonthBounds(int, int)

getMonthBounds

protected Rectangle getMonthBounds(int row,
                                   int column)
Returns the bounds of the month at the given logical coordinates in the grid of visible months.

Mapping logical grip position to pixel.

Parameters:
row - the rowIndex in the grid of months.
column - the columnIndex in the grid months.
Returns:
the bounds of the month at the given logical logical position.
See Also:
getMonthGridPositionAtLocation(int, int), getMonthBoundsAtLocation(int, int)

getMonthBounds

protected Rectangle getMonthBounds(Date date)
Returns the bounds of the month containing the given date. The bounds are in monthView coordinate system.

Mapping Date to pixel.

Parameters:
date - the Date to return the bounds for. Must not be null.
Returns:
the bounds of the month that contains the given date or null if not visible.
See Also:
getMonthAtLocation(int, int)

getMonthHeaderBounds

protected Rectangle getMonthHeaderBounds(Date date,
                                         boolean includeInsets)
Returns the bounds of the month containing the given date. The bounds are in monthView coordinate system.

Mapping Date to pixel.

Parameters:
date - the Date to return the bounds for. Must not be null.
Returns:
the bounds of the month that contains the given date or null if not visible.
See Also:
getMonthAtLocation(int, int)

getMonthSize

protected Dimension getMonthSize()
Returns the size of a month.

Returns:
the size of a month.

getDaySize

protected Dimension getDaySize()
Returns the size of a day including the padding.

Returns:
the size of a month.

getMonthHeaderHeight

protected int getMonthHeaderHeight()
Returns the height of the month header.

Returns:
the height of the month header.

isZoomable

protected boolean isZoomable()
Returns:
true if the month view can be zoomed, false otherwise

update

public void update(Graphics g,
                   JComponent c)
Overridden to extract the background painting for ease-of-use of subclasses.

Overrides:
update in class ComponentUI
Parameters:
g - the Graphics context in which to paint
c - the component being painted; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
See Also:
ComponentUI.paint(java.awt.Graphics, javax.swing.JComponent), JComponent.paintComponent(java.awt.Graphics)

paintBackground

protected void paintBackground(Graphics g)
Paints the background of the component. This implementation fill the monthView's area with its background color if opaque, does nothing if not opaque. Subclasses can override but must comply to opaqueness contract.

Parameters:
g - the Graphics to fill.

paint

public void paint(Graphics g,
                  JComponent c)
Paints the specified component appropriate for the look and feel. This method is invoked from the ComponentUI.update method when the specified component is being painted. Subclasses should override this method and use the specified Graphics object to render the content of the component.

Overrides:
paint in class ComponentUI
Parameters:
g - the Graphics context in which to paint
c - the component being painted; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
See Also:
ComponentUI.update(java.awt.Graphics, javax.swing.JComponent)

paintMonth

protected void paintMonth(Graphics g,
                          Calendar month)
Paints the month represented by the given Calendar. Note: the given calendar must not be changed.

Parameters:
g - the graphics to paint into
month - the calendar specifying the first day of the month to paint, must not be null

paintMonthHeader

protected void paintMonthHeader(Graphics g,
                                Calendar month)
Paints the header of a month. Note: the given calendar must not be changed.

Parameters:
g - the graphics to paint into
month - the calendar specifying the first day of the month to paint, must not be null

paintDayHeader

protected void paintDayHeader(Graphics g,
                              Calendar month)
Paints the day column header. Note: the given calendar must not be changed.

Parameters:
g - the graphics to paint into
month - the calendar specifying the first day of the month to paint, must not be null

paintWeekHeader

protected void paintWeekHeader(Graphics g,
                               Calendar month)
Paints the day column header. Note: the given calendar must not be changed.

Parameters:
g - the graphics to paint into
month - the calendar specifying the first day of the month to paint, must not be null

paintDays

protected void paintDays(Graphics g,
                         Calendar month)
Paints the days of the given month. Note: the given calendar must not be changed.

Parameters:
g - the graphics to paint into
month - the calendar specifying the first day of the month to paint, must not be null

paintDayOfMonth

protected void paintDayOfMonth(Graphics g,
                               Rectangle bounds,
                               Calendar calendar,
                               CalendarState state)
Paints a day which is of the current month with the given state.

PENDING JW: mis-nomer - this is in fact called for rendering any day-related state (including weekOfYear, dayOfWeek headers) and for rendering the month header as well, that is from everywhere. Rename to paintSomethingGeneral. Think about impact for subclasses (what do they really need? feedback please!)

Parameters:
g - the graphics to paint into.
bounds - the rectangle to paint the day into
calendar - the calendar representing the day to paint
state - the calendar state

paintWeekOfYearSeparator

protected void paintWeekOfYearSeparator(Graphics g,
                                        Calendar month)
Paints the separator between row header (weeks of year) and days. Note: the given calendar must not be changed.

Parameters:
g - the graphics to paint into
month - the calendar specifying the first day of the month to paint, must not be null

paintDaysOfWeekSeparator

protected void paintDaysOfWeekSeparator(Graphics g,
                                        Calendar month)
Paints the separator between column header (days of week) and days. Note: the given calendar must not be changed.

Parameters:
g - the graphics to paint into
month - the calendar specifying the the first day of the month to paint, must not be null

getWeeks

protected int getWeeks(Calendar month)
Returns the number of weeks to paint in the current month, as represented by the given calendar. The calendar is expected to be set to the first of the month. Note: the given calendar must not be changed.

Parameters:
month - the calendar specifying the the first day of the month to paint, must not be null
Returns:
the number of weeks of this month.

getCalendar

protected Calendar getCalendar()
Returns the monthViews calendar configured to the firstDisplayedDate. NOTE: it's safe to change the calendar state without resetting because it's JXMonthView's responsibility to protect itself.

Returns:
the monthView's calendar, configured with the firstDisplayedDate.

getCalendar

protected Calendar getCalendar(Date date)
Returns the monthViews calendar configured to the given time. NOTE: it's safe to change the calendar state without resetting because it's JXMonthView's responsibility to protect itself.

Parameters:
date - the date to configure the calendar with
Returns:
the monthView's calendar, configured with the given date.

getLastDisplayedDay

public Date getLastDisplayedDay()
Returns the last possible date that can be displayed. This is implemented by the UI since it is in control of layout and may possibly yeild different results based on implementation.

It's up to the UI to keep this property, based on internal state and the firstDisplayed as controlled by the JXMonthView.

Specified by:
getLastDisplayedDay in class MonthViewUI
Returns:
Date The date.

setFirstDisplayedDay

protected void setFirstDisplayedDay(Date firstDisplayedDay)
Updates internal state that depends on the MonthView's firstDisplayedDay property.

Here: updates lastDisplayedDay.

Parameters:
firstDisplayedDay - the firstDisplayedDate to set

getFirstDisplayedDay

protected Date getFirstDisplayedDay()
Returns the first displayed day. Convenience delegate to

Returns:
the firstDisplayed

getFirstDisplayedMonth

protected int getFirstDisplayedMonth()
Returns:
the firstDisplayedMonth

getFirstDisplayedYear

protected int getFirstDisplayedYear()
Returns:
the firstDisplayedYear

getSelection

protected SortedSet<Date> getSelection()
Returns:
the selection

getToday

protected Date getToday()
Returns:
the start of today.

isToday

protected boolean isToday(Date date)
Returns true if the date passed in is the same as today. PENDING JW: really want the exact test?

Parameters:
date - long representing the date you want to compare to today.
Returns:
true if the date passed is the same as today.

updateZoomable

protected void updateZoomable()
Updates state after the monthView's zoomable property has been changed. This implementation adds/removes the header component if zoomable is true/false respectively.


createCalendarHeaderHandler

protected CalendarHeaderHandler createCalendarHeaderHandler()
Creates and returns a calendar header handler which provides and configures a component for use in a zoomable monthView. Subclasses may override to return a custom handler.

This implementation first queries the UIManager for class to use and returns that if available, returns a BasicCalendarHeaderHandler if not.

Returns:
a calendar header handler providing a component for use in zoomable monthView.
See Also:
getHeaderFromUIManager(), CalendarHeaderHandler, BasicCalendarHeaderHandler

getHeaderFromUIManager

protected CalendarHeaderHandler getHeaderFromUIManager()
Returns a CalendarHeaderHandler looked up in the UIManager. This implementation looks for a String registered with a key of CalendarHeaderHandler.uiControllerID. If found it assumes that the value is the class name of the handler and tries to instantiate the handler.

Returns:
a CalendarHeaderHandler from the UIManager or null if none available or instantiation failed.

setCalendarHeaderHandler

protected void setCalendarHeaderHandler(CalendarHeaderHandler calendarHeaderHandler)
Parameters:
calendarHeaderHandler - the calendarHeaderHandler to set

getCalendarHeaderHandler

protected CalendarHeaderHandler getCalendarHeaderHandler()
Returns:
the calendarHeaderHandler

createDerivedFont

@Deprecated
protected Font createDerivedFont()
Deprecated. KEEP re-added usage in preliminary zoomable support no longer used in paint/layout with renderer.

Create a derived font used to when painting various pieces of the month view component. This method will be called whenever the font on the component is set so a new derived font can be created.