Package pamViewFX.fxNodes.pamAxis
Class PamAxisFX
java.lang.Object
pamViewFX.fxNodes.pamAxis.PamAxisFX
Draws an axis on a JavaFX Node. 
 
PamAxis contains all the information needed to draw an axis, the actual drawing is generally called from the paintComponent function in the containing window.
For a good example (in swing but similar to JavaFX), see PamAxisPanel which will automatically draw four axis around a central plot.
- Author:
 - Doug Gillespie
 - See Also:
 
- 
Property Summary
PropertiesTypePropertyDescriptionjavafx.beans.value.ObservableValue<? extends String> The axis labeljavafx.beans.property.DoublePropertyjavafx.beans.property.DoublePropertyjavafx.beans.property.BooleanPropertyGet the reverse property for the axis.javafx.beans.property.DoublePropertyThe start x pixel.javafx.beans.property.DoublePropertyThe end x pixeljavafx.beans.property.DoublePropertyThe start y pixeljavafx.beans.property.DoublePropertyThe end y pixel - 
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassInternal class to mimic the non-public JavaFx FontMetrics class, no longer available from JavaFX 9 onwards. - 
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final int - 
Constructor Summary
ConstructorsConstructorDescriptionPamAxisFX(double x1, double y1, double x2, double y2, double minVal, double maxVal, boolean aboveLeft, String label, String format) PamAxisFX(double x1, double y1, double x2, double y2, double minVal, double maxVal, int tickPosition, String label, int labelPos, String format)  - 
Method Summary
Modifier and TypeMethodDescriptionvoiddrawAxis(javafx.scene.canvas.GraphicsContext g) Draw the axis in the Graphics Context gvoiddrawAxis(javafx.scene.canvas.GraphicsContext g, double x1, double y1, double x2, double y2) Draw the axis in the graphics context g at the given positionvoiddrawGrid(javafx.scene.canvas.GraphicsContext g, com.sun.javafx.geom.Dimension2D plotSize, int minorGrid) Draw a grid to go with the axis.voiddrawGrid(javafx.scene.canvas.GraphicsContext g, com.sun.javafx.geom.Dimension2D plotSize, javafx.geometry.Insets insets, int minorGrid) protected voiddrawLinearAxis(javafx.scene.canvas.GraphicsContext g2d) Draw a linear axis on the graphics contextprotected voiddrawLogAxis(javafx.scene.canvas.GraphicsContext g2d) Draw a logarithmic axis on the graphics contextprotected voiddrawTickAndLabel(javafx.scene.canvas.GraphicsContext g2d, javafx.geometry.Point2D xy, double value) Draw a tick and a label at the given Point2D.protected StringformatValue(double val) Format the text for the label.getAutoFormat(boolean isInteger) static StringgetAutoFormat(double minVal, double maxVal, boolean isInteger) Work out the optimal format for the axis labels based on analysis of previously used axis labels.ArrayList<javafx.geometry.Point2D> getAxisPoint2Ds(boolean extraOne) Work out the coordinates of all tick marks.doublegetDataValue(double position) Converts a position on the plot into a data value based on the axis max, min and scale.static doublegetDefaultScaleEnd(double val, double otherVal) intgetExtent(javafx.scene.canvas.GraphicsContext g) Gets the dimension of the axis parallel to the direction of the tickmark - i.e.intGets the dimension of the axis parallel to the direction of the tickmark - i.e.intgetExtent2(javafx.scene.canvas.GraphicsContext g) Gets the dimension of the axis perpendicular to the direction of the tickmark - i.e.intgetExtent2(javafx.scene.canvas.GraphicsContext g, String typicalString) Gets the dimension of the axis perpendicular to the direction of the tickmark - i.e.getLabel()Gets the value of thelabelproperty.intdoubleLabel scale can be used to change the scaling of axis labels without changing the underlying axis data that get used for display calculations and projections between screen coordinates and data values.protected ArrayList<javafx.geometry.Point2D> getLogPoint2Ds(boolean extraOne) Get the coordinates of tick Point2Ds for a logarithmic axisdoubleGets the value of themaxValproperty.doubleGets the value of theminValproperty.static intgetNumDecPlaces(double value) doublegetPosition(double dataValue) The axis knows all about scale and can tell us the pixel value for any given data value.javafx.scene.paint.ColorintdoubleThe size of the axis in pixels.doublegetX1()Gets the value of thex1property.doublegetX2()Gets the value of thex2property.doublegetY1()Gets the value of they1property.doublegetY2()Gets the value of they2property.booleanbooleanCramped labels means that when drawing an axis, the end labels will be shifted to remain within the bounds of the axis itself.booleanbooleanbooleanbooleanbooleanjavafx.beans.value.ObservableValue<? extends String> The axis labeljavafx.beans.property.DoublePropertyjavafx.beans.property.DoublePropertyjavafx.beans.property.BooleanPropertyGet the reverse property for the axis.voidsetAllowScaleMultiples(boolean allowScaleMultiples) voidsetAngleScales(boolean angleScales) Easy way to make scales end at 45, 90, 180, etc and step in sensible 45, 90, etc.voidsetAutoFormat(boolean isInteger) Automatically set the format of axis labels based on the types of numbers in there.voidsetCrampLabels(boolean crampLabels) Cramped labels means that when drawing an axis, the end labels will be shifted to remain within the bounds of the axis itself.voidsetDrawLine(boolean drawLine) voidsetExtraAxisEndLabel(String extraAxisEndLabel) voidsetExtraAxisStartLabel(String extraAxStartLabel) voidsetForceFirstVal(boolean forceFirstVal, double forcedFirstVal) voidSet the format string for writing out numbers on the axis.voidsetFractionalScale(boolean fractionalScale) voidsetInterval(double interval) Set the interval between ticks.voidSet the axis label textvoidsetLabelPos(int labelPos) voidsetLabelScale(double labelScale) Label scale can be used to change the scaling of axis labels without changing the underlying axis data that get used for display calculations and projections between screen coordinates and data values.voidsetLogScale(boolean logScale) voidsetLogTenthsScale(boolean logTenthsScale) voidsetMaxVal(double maxVal) Sets the value of themaxValproperty.voidsetMinVal(double minVal) Sets the value of theminValproperty.voidsetPosition(double x1, double y1, double x2, double y2) Set the axis default coordinatesvoidsetRange(double minVal, double maxVal) Set the minimum and maximum values for the axis.voidsetReversed(boolean reverseAxis2) Set whether the axis is reversed.voidsetStrokeColor(javafx.scene.paint.Color strokeColor) Set the stroke colour.voidsetTickPosition(int tickPosition) voidsetX1(double x1) Sets the value of thex1property.voidsetX2(double x2) Sets the value of thex2property.voidsetY1(double y1) Sets the value of they1property.voidsetY2(double y2) Sets the value of they2property.javafx.beans.property.DoublePropertyThe start x pixel.javafx.beans.property.DoublePropertyThe end x pixeljavafx.beans.property.DoublePropertyThe start y pixeljavafx.beans.property.DoublePropertyThe end y pixel 
- 
Property Details
- 
minVal
public javafx.beans.property.DoubleProperty minValProperty- See Also:
 
 - 
maxVal
public javafx.beans.property.DoubleProperty maxValProperty- See Also:
 
 - 
x1
public javafx.beans.property.DoubleProperty x1PropertyThe start x pixel.- See Also:
 
 - 
x2
public javafx.beans.property.DoubleProperty x2PropertyThe end x pixel- See Also:
 
 - 
y1
public javafx.beans.property.DoubleProperty y1PropertyThe start y pixel- See Also:
 
 - 
y2
public javafx.beans.property.DoubleProperty y2PropertyThe end y pixel- See Also:
 
 - 
label
The axis label- See Also:
 
 - 
reverse
public javafx.beans.property.BooleanProperty reversePropertyGet the reverse property for the axis. The reverse property indicates whether the axis should be display from minimum at top of screen to maximum at bottom of the screen instead of the default vice versa.- See Also:
 
 
 - 
 - 
Field Details
- 
INTERVAL_AUTO
public static final int INTERVAL_AUTO- See Also:
 
 - 
ABOVE_LEFT
public static final int ABOVE_LEFT- See Also:
 
 - 
BELOW_RIGHT
public static final int BELOW_RIGHT- See Also:
 
 - 
BOTH_SIDES
public static final int BOTH_SIDES- See Also:
 
 - 
LABEL_NEAR_MAX
public static final int LABEL_NEAR_MAX- See Also:
 
 - 
LABEL_NEAR_MIN
public static final int LABEL_NEAR_MIN- See Also:
 
 - 
LABEL_NEAR_CENTRE
public static final int LABEL_NEAR_CENTRE- See Also:
 
 
 - 
 - 
Constructor Details
- 
PamAxisFX
public PamAxisFX(double x1, double y1, double x2, double y2, double minVal, double maxVal, int tickPosition, String label, int labelPos, String format) - Parameters:
 x1- first x coordinate of axisy1- first y coordinate of axisx2- second x coordinate of axisy2- second coordinate of axisminVal- minimum axis valuemaxVal- maximum axis valuetickPosition- tick position (ABOVE_LEFT or BELOW_RIGHT)label- text for label (or null if no label)labelPos- Position of axis label (LABEL_NEAR_MAX, LABEL_NEAR_MIN or LABEL_NEAR_CENTRE)format- format for numbers printed on the display. This must be a standard format String such as "%d", "%f", "%3.1f", "%.2 seconds", etc.
 - 
PamAxisFX
public PamAxisFX(double x1, double y1, double x2, double y2, double minVal, double maxVal, boolean aboveLeft, String label, String format) - Parameters:
 x1- x1y1- y1x2- x2y2- y2minVal- min axis valuemaxVal- max axis valueaboveLeft- above and / or to the leftlabel- axis labelformat- format of numbers
 
 - 
 - 
Method Details
- 
setPosition
public void setPosition(double x1, double y1, double x2, double y2) Set the axis default coordinates- Parameters:
 x1-y1-x2-y2-
 - 
setInterval
public void setInterval(double interval) Set the interval between ticks. This is by default set to INTERVAL_AUTO whereby an interval is chosen so that there is a tick mark approximately every 100 pixels.- Parameters:
 interval- the interval or INTERVAL_AUTO
 - 
setRange
public void setRange(double minVal, double maxVal) Set the minimum and maximum values for the axis.- Parameters:
 minVal- - the minimum value of the axismaxVal- - the maximu value of the axis.
 - 
drawAxis
public void drawAxis(javafx.scene.canvas.GraphicsContext g, double x1, double y1, double x2, double y2) Draw the axis in the graphics context g at the given position- Parameters:
 g-x1-y1-x2-y2-
 - 
drawAxis
public void drawAxis(javafx.scene.canvas.GraphicsContext g) Draw the axis in the Graphics Context g- Parameters:
 g- graphics context to draw on
 - 
getAxisPoint2Ds
Work out the coordinates of all tick marks.- Parameters:
 extraOne-- Returns:
 - list of axis Point2Ds.
 
 - 
drawLinearAxis
protected void drawLinearAxis(javafx.scene.canvas.GraphicsContext g2d) Draw a linear axis on the graphics context- Parameters:
 g2d- graphics context to draw on
 - 
drawLogAxis
protected void drawLogAxis(javafx.scene.canvas.GraphicsContext g2d) Draw a logarithmic axis on the graphics context- Parameters:
 g2d- graphics context to draw on
 - 
getLogPoint2Ds
Get the coordinates of tick Point2Ds for a logarithmic axis- Parameters:
 extraOne-- Returns:
 - Array of Point2Ds
 
 - 
drawTickAndLabel
protected void drawTickAndLabel(javafx.scene.canvas.GraphicsContext g2d, javafx.geometry.Point2D xy, double value) Draw a tick and a label at the given Point2D.- Parameters:
 g2d-xy-value-
 - 
formatValue
Format the text for the label.- Parameters:
 val- - value.- Returns:
 - formatted string.
 
 - 
drawGrid
public void drawGrid(javafx.scene.canvas.GraphicsContext g, com.sun.javafx.geom.Dimension2D plotSize, int minorGrid) Draw a grid to go with the axis. Generally, the graphics handle for grid drawing will be some inner window sitting inside the window containing the axis.- Parameters:
 g- Graphics context to draw onplotSize- size of the graphicminorGrid- draw a minor grid as well as lines at the main tick marks.
 - 
drawGrid
public void drawGrid(javafx.scene.canvas.GraphicsContext g, com.sun.javafx.geom.Dimension2D plotSize, javafx.geometry.Insets insets, int minorGrid)  - 
getExtent2
public int getExtent2(javafx.scene.canvas.GraphicsContext g) Gets the dimension of the axis perpendicular to the direction of the tickmark - i.e. for a vertical axis, it's half the text height, for a horizontal axis it's half the typical string width.- Parameters:
 g- graphics handle for component the axis is to be draw on- Returns:
 - axis extent in pixels
 
 - 
getExtent2
Gets the dimension of the axis perpendicular to the direction of the tickmark - i.e. for a vertical axis, it's half the text height, for a horizontal axis it's half the typical string width.- Parameters:
 g- graphics handle for component the axis is to be draw ontypicalString- typical text string.- Returns:
 - Axis extent
 
 - 
getExtent
public int getExtent(javafx.scene.canvas.GraphicsContext g) Gets the dimension of the axis parallel to the direction of the tickmark - i.e. the ticklength + the text height + the label height.- Parameters:
 g- graphics handle for component the axis is to be draw on- Returns:
 - axis extent in pixels
 
 - 
getExtent
Gets the dimension of the axis parallel to the direction of the tickmark - i.e. the ticklength + the text height + the label height.- Parameters:
 g- graphics handle the axis is being draw ontypicalString- typical label string for a tick- Returns:
 - axisextent in pixels
 
 - 
isLogScale
public boolean isLogScale() - 
setLogScale
public void setLogScale(boolean logScale)  - 
isDrawLine
public boolean isDrawLine() - 
setDrawLine
public void setDrawLine(boolean drawLine)  - 
getFormat
 - 
setFormat
Set the format string for writing out numbers on the axis.- Parameters:
 format- format string
 - 
setAutoFormat
public void setAutoFormat(boolean isInteger) Automatically set the format of axis labels based on the types of numbers in there. - 
getAutoFormat
 - 
getAutoFormat
 - 
getNumDecPlaces
public static int getNumDecPlaces(double value)  - 
isIntegerFormat
public boolean isIntegerFormat() - 
getLabel
Gets the value of thelabelproperty.- Property description:
 - The axis label
 - Returns:
 - the value of the 
labelproperty - See Also:
 
 - 
setLabel
Set the axis label text- Parameters:
 labelTxt-
 - 
getLabelPos
public int getLabelPos() - 
setLabelPos
public void setLabelPos(int labelPos)  - 
getTickPosition
public int getTickPosition() - 
setTickPosition
public void setTickPosition(int tickPosition)  - 
getMaxVal
public double getMaxVal()Gets the value of themaxValproperty.- Property description:
 - Returns:
 - the value of the 
maxValproperty - See Also:
 
 - 
setMaxVal
public void setMaxVal(double maxVal) Sets the value of themaxValproperty.- Property description:
 - Parameters:
 maxVal- the value for themaxValproperty- See Also:
 
 - 
getMinVal
public double getMinVal()Gets the value of theminValproperty.- Property description:
 - Returns:
 - the value of the 
minValproperty - See Also:
 
 - 
setMinVal
public void setMinVal(double minVal) Sets the value of theminValproperty.- Property description:
 - Parameters:
 minVal- the value for theminValproperty- See Also:
 
 - 
minValProperty
public javafx.beans.property.DoubleProperty minValProperty()- Returns:
 - the 
minValproperty - See Also:
 
 - 
maxValProperty
public javafx.beans.property.DoubleProperty maxValProperty()- Returns:
 - the 
maxValproperty - See Also:
 
 - 
getAutoLabelFormat
Work out the optimal format for the axis labels based on analysis of previously used axis labels.- Returns:
 - some kind of sensible format string !
 
 - 
getDefaultScaleEnd
public static double getDefaultScaleEnd(double val, double otherVal)  - 
setForceFirstVal
public void setForceFirstVal(boolean forceFirstVal, double forcedFirstVal)  - 
isLogTenthsScale
public boolean isLogTenthsScale() - 
setLogTenthsScale
public void setLogTenthsScale(boolean logTenthsScale)  - 
getAxisValues
 - 
getX1
public double getX1()Gets the value of thex1property.- Property description:
 - The start x pixel.
 - Returns:
 - the value of the 
x1property - See Also:
 
 - 
setX1
public void setX1(double x1) Sets the value of thex1property.- Property description:
 - The start x pixel.
 - Parameters:
 x1- the value for thex1property- See Also:
 
 - 
getX2
public double getX2()Gets the value of thex2property.- Property description:
 - The end x pixel
 - Returns:
 - the value of the 
x2property - See Also:
 
 - 
setX2
public void setX2(double x2) Sets the value of thex2property.- Property description:
 - The end x pixel
 - Parameters:
 x2- the value for thex2property- See Also:
 
 - 
getY1
public double getY1()Gets the value of they1property.- Property description:
 - The start y pixel
 - Returns:
 - the value of the 
y1property - See Also:
 
 - 
setY1
public void setY1(double y1) Sets the value of they1property.- Property description:
 - The start y pixel
 - Parameters:
 y1- the value for they1property- See Also:
 
 - 
getY2
public double getY2()Gets the value of they2property.- Property description:
 - The end y pixel
 - Returns:
 - the value of the 
y2property - See Also:
 
 - 
setY2
public void setY2(double y2) Sets the value of they2property.- Property description:
 - The end y pixel
 - Parameters:
 y2- the value for they2property- See Also:
 
 - 
x1Property
public javafx.beans.property.DoubleProperty x1Property()The start x pixel.- Returns:
 - the 
x1property - See Also:
 
 - 
x2Property
public javafx.beans.property.DoubleProperty x2Property()The end x pixel- Returns:
 - the 
x2property - See Also:
 
 - 
y1Property
public javafx.beans.property.DoubleProperty y1Property()The start y pixel- Returns:
 - the 
y1property - See Also:
 
 - 
y2Property
public javafx.beans.property.DoubleProperty y2Property()The end y pixel- Returns:
 - the 
y2property - See Also:
 
 - 
getPosition
public double getPosition(double dataValue) The axis knows all about scale and can tell us the pixel value for any given data value.- Parameters:
 dataValue- the value of the data.- Returns:
 - position in pixels along the axis for a given data value.
 
 - 
getDataValue
public double getDataValue(double position) Converts a position on the plot into a data value based on the axis max, min and scale.This is the exact compliment of getPosition()
- Parameters:
 position- position along the axis in pixels.- Returns:
 - data value.
 
 - 
isAllowScaleMultiples
public boolean isAllowScaleMultiples() - 
setAllowScaleMultiples
public void setAllowScaleMultiples(boolean allowScaleMultiples)  - 
setAngleScales
public void setAngleScales(boolean angleScales) Easy way to make scales end at 45, 90, 180, etc and step in sensible 45, 90, etc. steps.- Parameters:
 angleScales-
 - 
isFractionalScale
public boolean isFractionalScale() - 
setFractionalScale
public void setFractionalScale(boolean fractionalScale)  - 
getExtraAxisStartLabel
- Returns:
 - the extraAxStartLabel
 
 - 
setExtraAxisStartLabel
- Parameters:
 extraAxStartLabel- the extraAxStartLabel to set
 - 
getExtraAxisEndLabel
- Returns:
 - the extraAxisEndLabel
 
 - 
setExtraAxisEndLabel
- Parameters:
 extraAxisEndLabel- the extraAxisEndLabel to set
 - 
isCrampLabels
public boolean isCrampLabels()Cramped labels means that when drawing an axis, the end labels will be shifted to remain within the bounds of the axis itself.- Returns:
 - the crampLables
 
 - 
setCrampLabels
public void setCrampLabels(boolean crampLabels) Cramped labels means that when drawing an axis, the end labels will be shifted to remain within the bounds of the axis itself.- Parameters:
 crampLabels- the crampLables to set
 - 
getTotalPixels
public double getTotalPixels()The size of the axis in pixels.
e.g. if a horizontal axis this would be the width of the display.- Returns:
 - the size of the axis in pixels.
 
 - 
setStrokeColor
public void setStrokeColor(javafx.scene.paint.Color strokeColor) Set the stroke colour.- Parameters:
 strokeColor-
 - 
getStrokeColor
public javafx.scene.paint.Color getStrokeColor() - 
labelProperty
The axis label- Returns:
 - the 
labelproperty - See Also:
 
 - 
getLabelScale
public double getLabelScale()Label scale can be used to change the scaling of axis labels without changing the underlying axis data that get used for display calculations and projections between screen coordinates and data values. For instance this may be used on a time axis which wants to keep with SI units of seconds, but finds it 'nicer' to display the scale in millisecs, in which case labelScale should be set to 1000.- Returns:
 - the labelScale
 
 - 
setLabelScale
public void setLabelScale(double labelScale) Label scale can be used to change the scaling of axis labels without changing the underlying axis data that get used for display calculations and projections between screen coordinates and data values. For instance this may be used on a time axis which wants to keep with SI units of seconds, but finds it 'nicer' to display the scale in millisecs, in which case labelScale should be set to 1000.- Parameters:
 labelScale- the labelScale to set
 - 
reverseProperty
public javafx.beans.property.BooleanProperty reverseProperty()Get the reverse property for the axis. The reverse property indicates whether the axis should be display from minimum at top of screen to maximum at bottom of the screen instead of the default vice versa.- Returns:
 - the reverse boolean property.
 
 - 
setReversed
public void setReversed(boolean reverseAxis2) Set whether the axis is reversed. This indicates whether the axis should be display from minimum at top of screen to maximum at bottom of the screen instead of the default vice versa. 
 -