org.jfree.chart.plot
Class ThermometerPlot

java.lang.Object
  |
  +--org.jfree.chart.plot.Plot
        |
        +--org.jfree.chart.plot.ThermometerPlot
All Implemented Interfaces:
AxisChangeListener, AxisConstants, DatasetChangeListener, java.util.EventListener, java.io.Serializable, VerticalValuePlot

public class ThermometerPlot
extends Plot
implements VerticalValuePlot, java.io.Serializable

A plot that displays a single value in a thermometer type display.

NOTE: The Thermometer plot utilises a meter data set, however range options within this data set are not used (instead, the ranges can be set as attributes on the plot). This plot supports a number of options:

  1. three sub-ranges which could be viewed as 'Normal', 'Warning' and 'Critical' ranges.
  2. the thermometer can be run in two modes:
  3. settable units to be displayed.
  4. settable display location for the value text.

Author:
Bryan Scott
See Also:
Serialized Form

Field Summary
protected static int AXIS_GAP
          The axis gap.
static int BULB
          A constant for the value label position (in the thermometer bulb).
protected static int BULB_DIAMETER
          The bulb diameter.
protected static int BULB_RADIUS
          The bulb radius.
protected static int COLUMN_DIAMETER
          The column diameter.
protected static int COLUMN_RADIUS
          The column radius.
static int CRITICAL
          A constant for the 'critical' range.
protected static double DEFAULT_LOWER_BOUND
          The default lower bound.
protected static double DEFAULT_UPPER_BOUND
          The default upper bound.
protected static int DISPLAY_HIGH
          Index for display high value in subrangeInfo matrix.
protected static int DISPLAY_LOW
          Index for display low value in subrangeInfo matrix.
protected static int GAP_DIAMETER
          The gap diameter.
protected static int GAP_RADIUS
          The gap radius.
static int NONE
          A constant for the value label position (no label).
static int NORMAL
          A constant for the 'normal' range.
protected static int RANGE_HIGH
          Index for high value in subrangeInfo matrix.
protected static int RANGE_LOW
          Index for low value in subrangeInfo matrix.
static int RIGHT
          A constant for the value label position (right of the thermometer).
protected static java.lang.String[] UNITS
          The unit strings.
static int UNITS_CELCIUS
          A constant for unit type 'Celcius'.
static int UNITS_FAHRENHEIT
          A constant for unit type 'Fahrenheit'.
static int UNITS_KELVIN
          A constant for unit type 'Kelvin'.
static int UNITS_NONE
          A constant for unit type 'None'.
static int WARNING
          A constant for the 'warning' range.
 
Fields inherited from class org.jfree.chart.plot.Plot
DEFAULT_BACKGROUND_ALPHA, DEFAULT_BACKGROUND_PAINT, DEFAULT_FOREGROUND_ALPHA, DEFAULT_INSETS, DEFAULT_OUTLINE_PAINT, DEFAULT_OUTLINE_STROKE, MINIMUM_HEIGHT_TO_DRAW, MINIMUM_WIDTH_TO_DRAW, ZERO
 
Fields inherited from interface org.jfree.chart.axis.AxisConstants
BOTTOM, DEFAULT_AXIS_LABEL_FONT, DEFAULT_AXIS_LABEL_INSETS, DEFAULT_AXIS_LABEL_PAINT, DEFAULT_AXIS_VISIBLE, DEFAULT_TICK_LABEL_FONT, DEFAULT_TICK_LABEL_INSETS, DEFAULT_TICK_LABEL_PAINT, DEFAULT_TICK_LABELS_VISIBLE, DEFAULT_TICK_MARK_INSIDE_LENGTH, DEFAULT_TICK_MARK_OUTSIDE_LENGTH, DEFAULT_TICK_MARK_PAINT, DEFAULT_TICK_MARK_STROKE, DEFAULT_TICK_MARKS_VISIBLE, LEFT, TOP
 
Constructor Summary
ThermometerPlot()
          Creates a new thermometer plot.
ThermometerPlot(ValueDataset data)
          Creates a new thermometer plot, using default attributes where necessary.
 
Method Summary
 void datasetChanged(DatasetChangeEvent event)
          Checks to see if a new value means the axis range needs adjusting.
 void draw(java.awt.Graphics2D g2, java.awt.geom.Rectangle2D plotArea, ChartRenderingInfo info)
          Draws the plot on a Java 2D graphics device (such as the screen or a printer).
 boolean equals(java.lang.Object obj)
          Tests this plot for equality with another object.
 ValueDataset getData()
          Returns the dataset cast to ValueDataset (provided for convenience).
 boolean getFollowDataInSubranges()
          Returns a flag that controls whether or not the thermometer axis zooms to display the subrange within which the data value falls.
 java.util.List getLegendItemLabels()
          Deprecated. use getLegendItems().
 LegendItemCollection getLegendItems()
          Returns the legend items for the plot.
 double getLowerBound()
          Returns the lower bound for the thermometer.
 java.lang.Number getMaximumVerticalDataValue()
          Returns the maximum value in either the domain or the range, whichever is displayed against the vertical axis for the particular type of plot implementing this interface.
 java.awt.Paint getMercuryPaint()
          Returns the default mercury paint.
 java.lang.Number getMinimumVerticalDataValue()
          Returns the minimum value in either the domain or the range, whichever is displayed against the vertical axis for the particular type of plot implementing this interface.
 Spacer getPadding()
          Returns the padding for the thermometer.
 java.lang.String getPlotType()
          Returns a short string describing the type of plot.
 ValueAxis getRangeAxis()
          Returns the range axis.
 boolean getShowValueLines()
          Returns the flag that controls whether not value lines are displayed.
 java.awt.Paint getSubrangePaint(int range)
          Gets the paint used for a particular subrange.
 java.awt.Paint getThermometerPaint()
          Returns the paint used to draw the thermometer outline.
 java.awt.Stroke getThermometerStroke()
          Returns the stroke used to draw the thermometer outline.
 int getUnits()
          Returns the unit display type (none/Fahrenheit/Celcius/Kelvin).
 double getUpperBound()
          Returns the upper bound for the thermometer.
 boolean getUseSubrangePaint()
          Returns a flag that controls whether or not the mercury color changes for each subrange.
 java.awt.Font getValueFont()
          Gets the font used to display the current value.
 int getValueLocation()
          Returns the value location.
 java.awt.Paint getValuePaint()
          Gets the paint used to display the current value.
 Range getVerticalDataRange(ValueAxis axis)
          Returns the vertical data range.
 ValueAxis getVerticalValueAxis()
          Returns the vertical value axis.
 boolean isCompatibleHorizontalAxis(Axis axis)
          Returns true if the axis is compatible with the meter plot.
 boolean isCompatibleRangeAxis(ValueAxis axis)
          Checks the compatibility of a range axis, returning true if the axis is compatible with the plot, and false otherwise.
 boolean isCompatibleVerticalAxis(Axis axis)
          Returns true if the axis is compatible with the meter plot.
protected static boolean isValidNumber(double d)
          Determine whether a number is valid and finite.
 void propertyChange()
          Deprecated. this method is not required and will be removed.
protected  void setAxisRange()
          Sets the axis range to the current values in the rangeInfo array.
 void setData(ValueDataset data)
          Sets the data for the chart, replacing any existing data.
 void setDisplayRange(int range, double low, double high)
          Sets the display range.
 void setFollowDataInSubranges(boolean flag)
          Sets the flag that controls whether or not the thermometer axis zooms to display the subrange within which the data value falls.
 void setLowerBound(double lower)
          Sets the lower bound for the thermometer.
 void setMercuryPaint(java.awt.Paint paint)
          Sets the default mercury paint.
 void setPadding(Spacer padding)
          Sets the padding for the thermometer.
 void setRange(double lower, double upper)
          Sets the lower and upper bounds for the thermometer.
 void setRangeAxis(ValueAxis axis)
          Sets the range axis for the plot.
 void setShowValueLines(boolean b)
          Sets the display as to whether to show value lines in the output.
 void setSubrange(int range, double low, double high)
          Sets the range.
 void setSubrangeInfo(int range, double low, double hi)
          Sets information for a particular range.
 void setSubrangeInfo(int range, double rangeLow, double rangeHigh, double displayLow, double displayHigh)
          Sets the subrangeInfo attribute of the ThermometerPlot object
 void setSubrangePaint(int range, java.awt.Paint paint)
          Sets the paint to be used for a range.
 void setThermometerPaint(java.awt.Paint paint)
          Sets the paint used to draw the thermometer outline.
 void setThermometerStroke(java.awt.Stroke s)
          Sets the stroke used to draw the thermometer outline.
 void setUnits(int u)
          Sets the units to be displayed in the thermometer.
 void setUnits(java.lang.String u)
          Sets the unit type.
 void setUpperBound(double upper)
          Sets the upper bound for the thermometer.
 void setUseSubrangePaint(boolean flag)
          Sets the range colour change option.
 void setValueFont(java.awt.Font f)
          Sets the font used to display the current value.
 void setValueFormat(java.text.NumberFormat formatter)
          Sets the formatter for the value label.
 void setValueLocation(int location)
          Sets the location at which the current value is displayed.
 void setValuePaint(java.awt.Paint p)
          Sets the paint used to display the current value.
 void zoom(double percent)
          A zoom method that does nothing.
 
Methods inherited from class org.jfree.chart.plot.Plot
addChangeListener, axisChanged, drawBackground, drawNoDataMessage, drawOutline, getBackgroundAlpha, getBackgroundImage, getBackgroundImageAlignment, getBackgroundPaint, getDataAreaRatio, getDataset, getDatasetGroup, getForegroundAlpha, getInsets, getNoDataMessage, getNoDataMessageFont, getNoDataMessagePaint, getOppositeAxisLocation, getOutlinePaint, getOutlineStroke, getParent, getRectX, getRectY, getRootPlot, getSecondaryDataset, handleClick, isSubplot, notifyListeners, removeChangeListener, setBackgroundAlpha, setBackgroundImage, setBackgroundImageAlignment, setBackgroundPaint, setDataAreaRatio, setDataset, setDatasetGroup, setForegroundAlpha, setInsets, setInsets, setNoDataMessage, setNoDataMessageFont, setNoDataMessagePaint, setOutlinePaint, setOutlineStroke, setParent, setSecondaryDataset
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

UNITS_NONE

public static final int UNITS_NONE
A constant for unit type 'None'.

See Also:
Constant Field Values

UNITS_FAHRENHEIT

public static final int UNITS_FAHRENHEIT
A constant for unit type 'Fahrenheit'.

See Also:
Constant Field Values

UNITS_CELCIUS

public static final int UNITS_CELCIUS
A constant for unit type 'Celcius'.

See Also:
Constant Field Values

UNITS_KELVIN

public static final int UNITS_KELVIN
A constant for unit type 'Kelvin'.

See Also:
Constant Field Values

NONE

public static final int NONE
A constant for the value label position (no label).

See Also:
Constant Field Values

RIGHT

public static final int RIGHT
A constant for the value label position (right of the thermometer).

See Also:
Constant Field Values

BULB

public static final int BULB
A constant for the value label position (in the thermometer bulb).

See Also:
Constant Field Values

NORMAL

public static final int NORMAL
A constant for the 'normal' range.

See Also:
Constant Field Values

WARNING

public static final int WARNING
A constant for the 'warning' range.

See Also:
Constant Field Values

CRITICAL

public static final int CRITICAL
A constant for the 'critical' range.

See Also:
Constant Field Values

BULB_RADIUS

protected static final int BULB_RADIUS
The bulb radius.

See Also:
Constant Field Values

BULB_DIAMETER

protected static final int BULB_DIAMETER
The bulb diameter.

See Also:
Constant Field Values

COLUMN_RADIUS

protected static final int COLUMN_RADIUS
The column radius.

See Also:
Constant Field Values

COLUMN_DIAMETER

protected static final int COLUMN_DIAMETER
The column diameter.

See Also:
Constant Field Values

GAP_RADIUS

protected static final int GAP_RADIUS
The gap radius.

See Also:
Constant Field Values

GAP_DIAMETER

protected static final int GAP_DIAMETER
The gap diameter.

See Also:
Constant Field Values

AXIS_GAP

protected static final int AXIS_GAP
The axis gap.

See Also:
Constant Field Values

UNITS

protected static final java.lang.String[] UNITS
The unit strings.


RANGE_LOW

protected static final int RANGE_LOW
Index for low value in subrangeInfo matrix.

See Also:
Constant Field Values

RANGE_HIGH

protected static final int RANGE_HIGH
Index for high value in subrangeInfo matrix.

See Also:
Constant Field Values

DISPLAY_LOW

protected static final int DISPLAY_LOW
Index for display low value in subrangeInfo matrix.

See Also:
Constant Field Values

DISPLAY_HIGH

protected static final int DISPLAY_HIGH
Index for display high value in subrangeInfo matrix.

See Also:
Constant Field Values

DEFAULT_LOWER_BOUND

protected static final double DEFAULT_LOWER_BOUND
The default lower bound.

See Also:
Constant Field Values

DEFAULT_UPPER_BOUND

protected static final double DEFAULT_UPPER_BOUND
The default upper bound.

See Also:
Constant Field Values
Constructor Detail

ThermometerPlot

public ThermometerPlot()
Creates a new thermometer plot.


ThermometerPlot

public ThermometerPlot(ValueDataset data)
Creates a new thermometer plot, using default attributes where necessary.

Parameters:
data - the data set.
Method Detail

getData

public ValueDataset getData()
Returns the dataset cast to ValueDataset (provided for convenience).

Returns:
the dataset for the plot, cast as a ValueDataset.

setData

public void setData(ValueDataset data)
Sets the data for the chart, replacing any existing data.

Registered listeners are notified that the plot has been modified (this will normally trigger a chart redraw).

Parameters:
data - the new dataset.

getRangeAxis

public ValueAxis getRangeAxis()
Returns the range axis.

Returns:
the range axis.

setRangeAxis

public void setRangeAxis(ValueAxis axis)
                  throws AxisNotCompatibleException
Sets the range axis for the plot.

An exception is thrown if the new axis and the plot are not mutually compatible.

Parameters:
axis - the new axis.
Throws:
AxisNotCompatibleException - if the axis is not compatible with the plot.

getLowerBound

public double getLowerBound()
Returns the lower bound for the thermometer.

The data value can be set lower than this, but it will not be shown in the thermometer.

Returns:
the lower bound.

setLowerBound

public void setLowerBound(double lower)
Sets the lower bound for the thermometer.

Parameters:
lower - the lower bound.

getUpperBound

public double getUpperBound()
Returns the upper bound for the thermometer.

The data value can be set higher than this, but it will not be shown in the thermometer.

Returns:
the upper bound.

setUpperBound

public void setUpperBound(double upper)
Sets the upper bound for the thermometer.

Parameters:
upper - the upper bound.

setRange

public void setRange(double lower,
                     double upper)
Sets the lower and upper bounds for the thermometer.

Parameters:
lower - the lower bound.
upper - the upper bound.

getPadding

public Spacer getPadding()
Returns the padding for the thermometer. This is the space inside the plot area.

Returns:
the padding.

setPadding

public void setPadding(Spacer padding)
Sets the padding for the thermometer.

Parameters:
padding - the padding.

getThermometerStroke

public java.awt.Stroke getThermometerStroke()
Returns the stroke used to draw the thermometer outline.

Returns:
the stroke.

setThermometerStroke

public void setThermometerStroke(java.awt.Stroke s)
Sets the stroke used to draw the thermometer outline.

Parameters:
s - the new stroke (null ignored).

getThermometerPaint

public java.awt.Paint getThermometerPaint()
Returns the paint used to draw the thermometer outline.

Returns:
the paint.

setThermometerPaint

public void setThermometerPaint(java.awt.Paint paint)
Sets the paint used to draw the thermometer outline.

Parameters:
paint - the new paint (null ignored).

getUnits

public int getUnits()
Returns the unit display type (none/Fahrenheit/Celcius/Kelvin).

Returns:
the units type.

setUnits

public void setUnits(int u)
Sets the units to be displayed in the thermometer.

Use one of the following constants:

Parameters:
u - the new unit type.

setUnits

public void setUnits(java.lang.String u)
Sets the unit type.

Parameters:
u - the unit type (null ignored).

getValueLocation

public int getValueLocation()
Returns the value location.

Returns:
the location.

setValueLocation

public void setValueLocation(int location)
Sets the location at which the current value is displayed.

The location can be one of the constants: NONE, RIGHT and BULB.

Parameters:
location - the location.
Throws:
java.lang.IllegalArgumentException - if the location code is not valid.

getValueFont

public java.awt.Font getValueFont()
Gets the font used to display the current value.

Returns:
the font.

setValueFont

public void setValueFont(java.awt.Font f)
Sets the font used to display the current value.

Parameters:
f - the new font.

getValuePaint

public java.awt.Paint getValuePaint()
Gets the paint used to display the current value.

Returns:
the paint.

setValuePaint

public void setValuePaint(java.awt.Paint p)
Sets the paint used to display the current value.

Parameters:
p - the new paint.

setValueFormat

public void setValueFormat(java.text.NumberFormat formatter)
Sets the formatter for the value label.

Parameters:
formatter - the new formatter.

getMercuryPaint

public java.awt.Paint getMercuryPaint()
Returns the default mercury paint.

Returns:
the paint.

setMercuryPaint

public void setMercuryPaint(java.awt.Paint paint)
Sets the default mercury paint.

Parameters:
paint - the new paint.

getShowValueLines

public boolean getShowValueLines()
Returns the flag that controls whether not value lines are displayed.

Returns:
the flag.

setShowValueLines

public void setShowValueLines(boolean b)
Sets the display as to whether to show value lines in the output.

Parameters:
b - Whether to show value lines in the thermometer

setSubrangeInfo

public void setSubrangeInfo(int range,
                            double low,
                            double hi)
Sets information for a particular range.

Parameters:
range - the range to specify information about.
low - the low value for the range
hi - the high value for the range

setSubrangeInfo

public void setSubrangeInfo(int range,
                            double rangeLow,
                            double rangeHigh,
                            double displayLow,
                            double displayHigh)
Sets the subrangeInfo attribute of the ThermometerPlot object

Parameters:
range - the new rangeInfo value.
rangeLow - the new rangeInfo value
rangeHigh - the new rangeInfo value
displayLow - the new rangeInfo value
displayHigh - the new rangeInfo value

setSubrange

public void setSubrange(int range,
                        double low,
                        double high)
Sets the range.

Parameters:
range - the range type.
low - the low value.
high - the high value.

setDisplayRange

public void setDisplayRange(int range,
                            double low,
                            double high)
Sets the display range.

Parameters:
range - the range type.
low - the low value.
high - the high value.

getSubrangePaint

public java.awt.Paint getSubrangePaint(int range)
Gets the paint used for a particular subrange.

Parameters:
range - the range.
Returns:
the paint.

setSubrangePaint

public void setSubrangePaint(int range,
                             java.awt.Paint paint)
Sets the paint to be used for a range.

Parameters:
range - the range.
paint - the paint to be applied.

getFollowDataInSubranges

public boolean getFollowDataInSubranges()
Returns a flag that controls whether or not the thermometer axis zooms to display the subrange within which the data value falls.

Returns:
the flag.

setFollowDataInSubranges

public void setFollowDataInSubranges(boolean flag)
Sets the flag that controls whether or not the thermometer axis zooms to display the subrange within which the data value falls.

Parameters:
flag - the flag.

getUseSubrangePaint

public boolean getUseSubrangePaint()
Returns a flag that controls whether or not the mercury color changes for each subrange.

Returns:
the flag.

setUseSubrangePaint

public void setUseSubrangePaint(boolean flag)
Sets the range colour change option.

Parameters:
flag - The new range colour change option

draw

public void draw(java.awt.Graphics2D g2,
                 java.awt.geom.Rectangle2D plotArea,
                 ChartRenderingInfo info)
Draws the plot on a Java 2D graphics device (such as the screen or a printer).

Specified by:
draw in class Plot
Parameters:
g2 - the graphics device.
plotArea - the area within which the plot should be drawn.
info - collects info about the drawing.

zoom

public void zoom(double percent)
A zoom method that does nothing.

Plots are required to support the zoom operation. In the case of a thermometer chart, it doesn't make sense to zoom in or out, so the method is empty.

Overrides:
zoom in class Plot
Parameters:
percent - the zoom percentage.

getPlotType

public java.lang.String getPlotType()
Returns a short string describing the type of plot.

Specified by:
getPlotType in class Plot
Returns:
a short string describing the type of plot.

datasetChanged

public void datasetChanged(DatasetChangeEvent event)
Checks to see if a new value means the axis range needs adjusting.

Specified by:
datasetChanged in interface DatasetChangeListener
Overrides:
datasetChanged in class Plot
Parameters:
event - the dataset change event.

getMinimumVerticalDataValue

public java.lang.Number getMinimumVerticalDataValue()
Returns the minimum value in either the domain or the range, whichever is displayed against the vertical axis for the particular type of plot implementing this interface.

Returns:
the minimum value in either the domain or the range.

getMaximumVerticalDataValue

public java.lang.Number getMaximumVerticalDataValue()
Returns the maximum value in either the domain or the range, whichever is displayed against the vertical axis for the particular type of plot implementing this interface.

Returns:
the maximum value in either the domain or the range

getVerticalDataRange

public Range getVerticalDataRange(ValueAxis axis)
Returns the vertical data range.

Specified by:
getVerticalDataRange in interface VerticalValuePlot
Parameters:
axis - the axis.
Returns:
The range of data displayed.

isCompatibleHorizontalAxis

public boolean isCompatibleHorizontalAxis(Axis axis)
Returns true if the axis is compatible with the meter plot. Since a Thermometer plot requires no horizontal axis, only a null axis is compatible.

Parameters:
axis - the axis.
Returns:
true, if the axis is null, and false otherwise.

isCompatibleVerticalAxis

public boolean isCompatibleVerticalAxis(Axis axis)
Returns true if the axis is compatible with the meter plot. Since a Thermometer plot requires a VerticalNumberAxis, only a VerticalNumberAxis axis is compatible.

Parameters:
axis - the axis.
Returns:
true, if the axis is compatible with the plot, and false otherwise.

propertyChange

public void propertyChange()
Deprecated. this method is not required and will be removed.

Fires a plot change event.


setAxisRange

protected void setAxisRange()
Sets the axis range to the current values in the rangeInfo array.


getLegendItemLabels

public java.util.List getLegendItemLabels()
Deprecated. use getLegendItems().

Returns null, since the thermometer plot won't require a legend.

Returns:
null.

getLegendItems

public LegendItemCollection getLegendItems()
Returns the legend items for the plot.

Overrides:
getLegendItems in class Plot
Returns:
null.

isCompatibleRangeAxis

public boolean isCompatibleRangeAxis(ValueAxis axis)
Checks the compatibility of a range axis, returning true if the axis is compatible with the plot, and false otherwise.

Parameters:
axis - The proposed axis.
Returns:
true if the axis is compatible with the plot.

getVerticalValueAxis

public ValueAxis getVerticalValueAxis()
Returns the vertical value axis.

This is required by the VerticalValuePlot interface, but not used in this class.

Specified by:
getVerticalValueAxis in interface VerticalValuePlot
Returns:
the vertical value axis.

isValidNumber

protected static boolean isValidNumber(double d)
Determine whether a number is valid and finite.

Parameters:
d - the number to be tested.
Returns:
true if the number is valid and finite, and false otherwise.

equals

public boolean equals(java.lang.Object obj)
Tests this plot for equality with another object.

Overrides:
equals in class Plot
Parameters:
obj - the object.
Returns:
true or false.