org.jfree.chart.axis

Class CyclicNumberAxis

Implemented Interfaces:
Cloneable, PublicCloneable, Serializable

public class CyclicNumberAxis
extends NumberAxis

This class extends NumberAxis and handles cycling. Traditional representation of data in the range x0..x1
|-------------------------|
x0                       x1
Here, the range bounds are at the axis extremities. With cyclic axis, however, the time is split in "cycles", or "time frames", or the same duration : the period. A cycle axis cannot by definition handle a larger interval than the period :
x1 - x0 >= period
. Thus, at most a full period can be represented with such an axis. The cycle bound is the number between x0 and x1 which marks the beginning of new time frame:
|---------------------|----------------------------|
x0                   cb                           x1
<---previous cycle---><-------current cycle-------->
It is actually a multiple of the period, plus optionally a start offset:
cb = n * period + offset
Thus, by definition, two consecutive cycle bounds period apart, which is precisely why it is called a period. The visual representation of a cyclic axis is like that:
|----------------------------|---------------------|
cb                         x1|x0                  cb
<-------current cycle--------><---previous cycle--->
The cycle bound is at the axis ends, then current cycle is shown, then the last cycle. When using dynamic data, the visual effect is the current cycle erases the last cycle as x grows. Then, the next cycle bound is reached, and the process starts over, erasing the previous cycle. A Cyclic item renderer is provided to do exactly this.

Nested Class Summary

protected static class
CyclicNumberAxis.CycleBoundTick
A special Number tick that also hold information about the cycle bound mapping for this tick.

Field Summary

static Paint
DEFAULT_ADVANCE_LINE_PAINT
The default axis line paint.
static Stroke
DEFAULT_ADVANCE_LINE_STROKE
The default axis line stroke.
protected Paint
advanceLinePaint
The advance line paint.
protected Stroke
advanceLineStroke
The advance line stroke.
protected boolean
advanceLineVisible
A flag that controls whether or not the advance line is visible.
protected boolean
boundMappedToLastCycle
??.
protected double
offset
The offset.
protected double
period
The period.

Fields inherited from class org.jfree.chart.axis.NumberAxis

DEFAULT_AUTO_RANGE_INCLUDES_ZERO, DEFAULT_AUTO_RANGE_STICKY_ZERO, DEFAULT_TICK_UNIT, DEFAULT_VERTICAL_TICK_LABELS

Fields inherited from class org.jfree.chart.axis.ValueAxis

DEFAULT_AUTO_RANGE, DEFAULT_AUTO_RANGE_MINIMUM_SIZE, DEFAULT_AUTO_TICK_UNIT_SELECTION, DEFAULT_INVERTED, DEFAULT_LOWER_BOUND, DEFAULT_LOWER_MARGIN, DEFAULT_RANGE, DEFAULT_UPPER_BOUND, DEFAULT_UPPER_MARGIN, MAXIMUM_TICK_COUNT

Fields inherited from class org.jfree.chart.axis.Axis

DEFAULT_AXIS_LABEL_FONT, DEFAULT_AXIS_LABEL_INSETS, DEFAULT_AXIS_LABEL_PAINT, DEFAULT_AXIS_LINE_PAINT, DEFAULT_AXIS_LINE_STROKE, DEFAULT_AXIS_VISIBLE, DEFAULT_TICK_LABELS_VISIBLE, DEFAULT_TICK_LABEL_FONT, DEFAULT_TICK_LABEL_INSETS, DEFAULT_TICK_LABEL_PAINT, DEFAULT_TICK_MARKS_VISIBLE, DEFAULT_TICK_MARK_INSIDE_LENGTH, DEFAULT_TICK_MARK_OUTSIDE_LENGTH, DEFAULT_TICK_MARK_PAINT, DEFAULT_TICK_MARK_STROKE

Constructor Summary

CyclicNumberAxis(double period)
Creates a CycleNumberAxis with the given period.
CyclicNumberAxis(double period, String label)
Creates a named CycleNumberAxis with the given period.
CyclicNumberAxis(double period, double offset)
Creates a CycleNumberAxis with the given period and offset.
CyclicNumberAxis(double period, double offset, String label)
Creates a named CycleNumberAxis with the given period and offset.

Method Summary

protected float[]
calculateAnchorPoint(ValueTick tick, double cursor, Rectangle2D dataArea, RectangleEdge edge)
Calculates the anchor point for a tick.
void
centerRange(double value)
Centers the range about the given value.
AxisState
draw(Graphics2D g2, double cursor, Rectangle2D plotArea, Rectangle2D dataArea, RectangleEdge edge, PlotRenderingInfo plotState)
Draws the axis.
protected AxisState
drawTickMarksAndLabels(Graphics2D g2, double cursor, Rectangle2D plotArea, Rectangle2D dataArea, RectangleEdge edge)
Draws the tick marks and labels.
boolean
equals(Object obj)
Tests the axis for equality with another object.
Paint
getAdvanceLinePaint()
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
Stroke
getAdvanceLineStroke()
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
double
getCycleBound()
The cycle bound is defined as the higest value x such that "offset + period * i = x", with i and integer and x < range.getUpperBound() This is the value which is at both ends of the axis : x...up|low...x The values from x to up are the valued in the current cycle.
double
getOffset()
The cycle bound is a multiple of the period, plus optionally a start offset.
double
getPeriod()
The cycle bound is a multiple of the period, plus optionally a start offset.
boolean
isAdvanceLineVisible()
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
boolean
isBoundMappedToLastCycle()
The cycle bound can be associated either with the current or with the last cycle.
double
java2DToValue(double java2DValue, Rectangle2D dataArea, RectangleEdge edge)
Converts a coordinate from Java 2D space to data space.
protected List
refreshTicksHorizontal(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge)
Builds a list of ticks for the axis.
protected List
refreshVerticalTicks(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge)
Builds a list of ticks for the axis.
AxisSpace
reserveSpace(Graphics2D g2, Plot plot, Rectangle2D plotArea, RectangleEdge edge, AxisSpace space)
Reserve some space on each axis side because we draw a centered label at each extremity.
protected void
selectHorizontalAutoTickUnit(Graphics2D g2, Rectangle2D drawArea, Rectangle2D dataArea, RectangleEdge edge)
Selects a tick unit when the axis is displayed horizontally.
protected void
selectVerticalAutoTickUnit(Graphics2D g2, Rectangle2D drawArea, Rectangle2D dataArea, RectangleEdge edge)
Selects a tick unit when the axis is displayed vertically.
void
setAdvanceLinePaint(Paint paint)
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
void
setAdvanceLineStroke(Stroke stroke)
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
void
setAdvanceLineVisible(boolean visible)
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
void
setAutoRangeMinimumSize(double size, boolean notify)
This function is nearly useless since the auto range is fixed for this class to the period.
void
setBoundMappedToLastCycle(boolean boundMappedToLastCycle)
The cycle bound can be associated either with the current or with the last cycle.
void
setFixedAutoRange(double length)
The auto range is fixed for this class to the period by default.
void
setOffset(double offset)
The cycle bound is a multiple of the period, plus optionally a start offset.
void
setPeriod(double period)
The cycle bound is a multiple of the period, plus optionally a start offset.
void
setRange(Range range, boolean turnOffAutoRange, boolean notify)
Sets a new axis range.
double
valueToJava2D(double value, Rectangle2D dataArea, RectangleEdge edge)
Translates a value from data space to Java 2D space.

Methods inherited from class org.jfree.chart.axis.NumberAxis

autoAdjustRange, calculateHighestVisibleTickValue, calculateLowestVisibleTickValue, calculateVisibleTickCount, clone, configure, createIntegerTickUnits, createIntegerTickUnits, createStandardTickUnits, createStandardTickUnits, draw, equals, estimateMaximumTickLabelHeight, estimateMaximumTickLabelWidth, getAutoRangeIncludesZero, getAutoRangeStickyZero, getMarkerBand, getNumberFormatOverride, getRangeType, getTickUnit, hashCode, java2DToValue, refreshTicks, refreshTicksHorizontal, refreshTicksVertical, selectAutoTickUnit, selectHorizontalAutoTickUnit, selectVerticalAutoTickUnit, setAutoRangeIncludesZero, setAutoRangeStickyZero, setMarkerBand, setNumberFormatOverride, setRangeType, setTickUnit, setTickUnit, valueToJava2D

Methods inherited from class org.jfree.chart.axis.ValueAxis

autoAdjustRange, calculateAnchorPoint, centerRange, clone, drawAxisLine, drawTickMarksAndLabels, equals, findMaximumTickLabelHeight, findMaximumTickLabelWidth, getAutoRangeMinimumSize, getAutoTickIndex, getDefaultAutoRange, getDownArrow, getFixedAutoRange, getLeftArrow, getLowerBound, getLowerMargin, getRange, getRightArrow, getStandardTickUnits, getUpArrow, getUpperBound, getUpperMargin, isAutoRange, isAutoTickUnitSelection, isInverted, isNegativeArrowVisible, isPositiveArrowVisible, isVerticalTickLabels, java2DToValue, lengthToJava2D, reserveSpace, resizeRange, resizeRange, setAutoRange, setAutoRange, setAutoRangeMinimumSize, setAutoRangeMinimumSize, setAutoTickIndex, setAutoTickUnitSelection, setAutoTickUnitSelection, setDefaultAutoRange, setDownArrow, setFixedAutoRange, setInverted, setLeftArrow, setLowerBound, setLowerMargin, setNegativeArrowVisible, setPositiveArrowVisible, setRange, setRange, setRange, setRangeAboutValue, setRangeWithMargins, setRangeWithMargins, setRangeWithMargins, setRightArrow, setStandardTickUnits, setUpArrow, setUpperBound, setUpperMargin, setVerticalTickLabels, valueToJava2D, zoomRange

Methods inherited from class org.jfree.chart.axis.Axis

addChangeListener, clone, configure, draw, drawAxisLine, drawLabel, equals, getAxisLinePaint, getAxisLineStroke, getFixedDimension, getLabel, getLabelAngle, getLabelEnclosure, getLabelFont, getLabelInsets, getLabelPaint, getPlot, getTickLabelFont, getTickLabelInsets, getTickLabelPaint, getTickMarkInsideLength, getTickMarkOutsideLength, getTickMarkPaint, getTickMarkStroke, hasListener, isAxisLineVisible, isTickLabelsVisible, isTickMarksVisible, isVisible, notifyListeners, refreshTicks, removeChangeListener, reserveSpace, setAxisLinePaint, setAxisLineStroke, setAxisLineVisible, setFixedDimension, setLabel, setLabelAngle, setLabelFont, setLabelInsets, setLabelPaint, setPlot, setTickLabelFont, setTickLabelInsets, setTickLabelPaint, setTickLabelsVisible, setTickMarkInsideLength, setTickMarkOutsideLength, setTickMarkPaint, setTickMarkStroke, setTickMarksVisible, setVisible

Field Details

DEFAULT_ADVANCE_LINE_PAINT

public static final Paint DEFAULT_ADVANCE_LINE_PAINT
The default axis line paint.

DEFAULT_ADVANCE_LINE_STROKE

public static Stroke DEFAULT_ADVANCE_LINE_STROKE
The default axis line stroke.

advanceLinePaint

protected Paint advanceLinePaint
The advance line paint.

advanceLineStroke

protected Stroke advanceLineStroke
The advance line stroke.

advanceLineVisible

protected boolean advanceLineVisible
A flag that controls whether or not the advance line is visible.

boundMappedToLastCycle

protected boolean boundMappedToLastCycle
??.

offset

protected double offset
The offset.

period

protected double period
The period.

Constructor Details

CyclicNumberAxis

public CyclicNumberAxis(double period)
Creates a CycleNumberAxis with the given period.
Parameters:
period - the period.

CyclicNumberAxis

public CyclicNumberAxis(double period,
                        String label)
Creates a named CycleNumberAxis with the given period.
Parameters:
period - the period.
label - the label.

CyclicNumberAxis

public CyclicNumberAxis(double period,
                        double offset)
Creates a CycleNumberAxis with the given period and offset.
Parameters:
period - the period.
offset - the offset.

CyclicNumberAxis

public CyclicNumberAxis(double period,
                        double offset,
                        String label)
Creates a named CycleNumberAxis with the given period and offset.
Parameters:
period - the period.
offset - the offset.
label - the label.

Method Details

calculateAnchorPoint

protected float[] calculateAnchorPoint(ValueTick tick,
                                       double cursor,
                                       Rectangle2D dataArea,
                                       RectangleEdge edge)
Calculates the anchor point for a tick.
Overrides:
calculateAnchorPoint in interface ValueAxis
Parameters:
tick - the tick.
cursor - the cursor.
dataArea - the data area.
edge - the side on which the axis is displayed.
Returns:
The anchor point.

centerRange

public void centerRange(double value)
Centers the range about the given value.
Overrides:
centerRange in interface ValueAxis
Parameters:
value - the data value.

draw

public AxisState draw(Graphics2D g2,
                      double cursor,
                      Rectangle2D plotArea,
                      Rectangle2D dataArea,
                      RectangleEdge edge,
                      PlotRenderingInfo plotState)
Draws the axis.
Overrides:
draw in interface NumberAxis
Parameters:
g2 - the graphics device (null not permitted).
cursor - the cursor position.
plotArea - the plot area (null not permitted).
dataArea - the data area (null not permitted).
edge - the edge (null not permitted).
plotState - collects information about the plot (null permitted).
Returns:
The axis state (never null).

drawTickMarksAndLabels

protected AxisState drawTickMarksAndLabels(Graphics2D g2,
                                           double cursor,
                                           Rectangle2D plotArea,
                                           Rectangle2D dataArea,
                                           RectangleEdge edge)
Draws the tick marks and labels.
Overrides:
drawTickMarksAndLabels in interface ValueAxis
Parameters:
g2 - the graphics device.
cursor - the cursor.
plotArea - the plot area.
dataArea - the area inside the axes.
edge - the side on which the axis is displayed.
Returns:
The axis state.

equals

public boolean equals(Object obj)
Tests the axis for equality with another object.
Overrides:
equals in interface NumberAxis
Parameters:
obj - the object to test against.
Returns:
A boolean.

getAdvanceLinePaint

public Paint getAdvanceLinePaint()
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
Returns:
The paint (never null).

getAdvanceLineStroke

public Stroke getAdvanceLineStroke()
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
Returns:
The stroke (never null).

getCycleBound

public double getCycleBound()
The cycle bound is defined as the higest value x such that "offset + period * i = x", with i and integer and x < range.getUpperBound() This is the value which is at both ends of the axis : x...up|low...x The values from x to up are the valued in the current cycle. The values from low to x are the valued in the previous cycle.
Returns:
The cycle bound.

getOffset

public double getOffset()
The cycle bound is a multiple of the period, plus optionally a start offset.

cb = n * period + offset

Returns:
The current offset.

getPeriod

public double getPeriod()
The cycle bound is a multiple of the period, plus optionally a start offset.

cb = n * period + offset

Returns:
The current period.

isAdvanceLineVisible

public boolean isAdvanceLineVisible()
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
Returns:
A boolean.

isBoundMappedToLastCycle

public boolean isBoundMappedToLastCycle()
The cycle bound can be associated either with the current or with the last cycle. It's up to the user's choice to decide which, as this is just a convention. By default, the cycle bound is mapped to the current cycle.
Note that this has no effect on visual appearance, as the cycle bound is mapped successively for both axis ends. Use this function for correct results in translateValueToJava2D.
Returns:
true if the cycle bound is mapped to the last cycle, false if it is bound to the current cycle (default)

java2DToValue

public double java2DToValue(double java2DValue,
                            Rectangle2D dataArea,
                            RectangleEdge edge)
Converts a coordinate from Java 2D space to data space.
Overrides:
java2DToValue in interface NumberAxis
Parameters:
java2DValue - the coordinate in Java2D space.
dataArea - the data area.
edge - the edge.
Returns:
The data value.

refreshTicksHorizontal

protected List refreshTicksHorizontal(Graphics2D g2,
                                      Rectangle2D dataArea,
                                      RectangleEdge edge)
Builds a list of ticks for the axis. This method is called when the axis is at the top or bottom of the chart (so the axis is "horizontal").
Overrides:
refreshTicksHorizontal in interface NumberAxis
Parameters:
g2 - the graphics device.
dataArea - the data area.
edge - the edge.
Returns:
A list of ticks.

refreshVerticalTicks

protected List refreshVerticalTicks(Graphics2D g2,
                                    Rectangle2D dataArea,
                                    RectangleEdge edge)
Builds a list of ticks for the axis. This method is called when the axis is at the left or right of the chart (so the axis is "vertical").
Parameters:
g2 - the graphics device.
dataArea - the data area.
edge - the edge.
Returns:
A list of ticks.

reserveSpace

public AxisSpace reserveSpace(Graphics2D g2,
                              Plot plot,
                              Rectangle2D plotArea,
                              RectangleEdge edge,
                              AxisSpace space)
Reserve some space on each axis side because we draw a centered label at each extremity.
Overrides:
reserveSpace in interface ValueAxis
Parameters:
g2 - the graphics device.
plot - the plot.
plotArea - the plot area.
edge - the edge.
space - the space already reserved.
Returns:
The reserved space.

selectHorizontalAutoTickUnit

protected void selectHorizontalAutoTickUnit(Graphics2D g2,
                                            Rectangle2D drawArea,
                                            Rectangle2D dataArea,
                                            RectangleEdge edge)
Selects a tick unit when the axis is displayed horizontally.
Parameters:
g2 - the graphics device.
drawArea - the drawing area.
dataArea - the data area.
edge - the side of the rectangle on which the axis is displayed.

selectVerticalAutoTickUnit

protected void selectVerticalAutoTickUnit(Graphics2D g2,
                                          Rectangle2D drawArea,
                                          Rectangle2D dataArea,
                                          RectangleEdge edge)
Selects a tick unit when the axis is displayed vertically.
Parameters:
g2 - the graphics device.
drawArea - the drawing area.
dataArea - the data area.
edge - the side of the rectangle on which the axis is displayed.

setAdvanceLinePaint

public void setAdvanceLinePaint(Paint paint)
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
Parameters:
paint - the paint (null not permitted).

setAdvanceLineStroke

public void setAdvanceLineStroke(Stroke stroke)
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
Parameters:
stroke - the stroke (null not permitted).

setAdvanceLineVisible

public void setAdvanceLineVisible(boolean visible)
The advance line is the line drawn at the limit of the current cycle, when erasing the previous cycle.
Parameters:
visible - the flag.

setAutoRangeMinimumSize

public void setAutoRangeMinimumSize(double size,
                                    boolean notify)
This function is nearly useless since the auto range is fixed for this class to the period. The period is extended if necessary to fit the minimum size.
Overrides:
setAutoRangeMinimumSize in interface ValueAxis
Parameters:
size - the size.
notify - notify?

setBoundMappedToLastCycle

public void setBoundMappedToLastCycle(boolean boundMappedToLastCycle)
The cycle bound can be associated either with the current or with the last cycle. It's up to the user's choice to decide which, as this is just a convention. By default, the cycle bound is mapped to the current cycle.
Note that this has no effect on visual appearance, as the cycle bound is mapped successively for both axis ends. Use this function for correct results in valueToJava2D.
Parameters:
boundMappedToLastCycle - Set it to true to map the cycle bound to the last cycle.

setFixedAutoRange

public void setFixedAutoRange(double length)
The auto range is fixed for this class to the period by default. This function will thus set a new period.
Overrides:
setFixedAutoRange in interface ValueAxis
Parameters:
length - the length.

setOffset

public void setOffset(double offset)
The cycle bound is a multiple of the period, plus optionally a start offset.

cb = n * period + offset

Parameters:
offset - The offset to set.

setPeriod

public void setPeriod(double period)
The cycle bound is a multiple of the period, plus optionally a start offset.

cb = n * period + offset

Parameters:
period - The period to set.

setRange

public void setRange(Range range,
                     boolean turnOffAutoRange,
                     boolean notify)
Sets a new axis range. The period is extended to fit the range size, if necessary.
Overrides:
setRange in interface ValueAxis
Parameters:
range - the range.
turnOffAutoRange - switch off the auto range.
notify - notify?

valueToJava2D

public double valueToJava2D(double value,
                            Rectangle2D dataArea,
                            RectangleEdge edge)
Translates a value from data space to Java 2D space.
Overrides:
valueToJava2D in interface NumberAxis
Parameters:
value - the data value.
dataArea - the data area.
edge - the edge.
Returns:
The Java 2D value.