Created
August 1, 2012 10:06
-
-
Save kevinsdooapp/3225604 to your computer and use it in GitHub Desktop.
Implementation of the logarithmic axis (step 1)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import javafx.scene.chart.ValueAxis; | |
/** | |
* A logarithmic axis implementation for JavaFX 2 charts<br> | |
* <br> | |
* | |
* @author Kevin Senechal | |
* | |
*/ | |
public class LogarithmicAxis extends ValueAxis<Number> { | |
private final DoubleProperty logUpperBound = new SimpleDoubleProperty(); | |
private final DoubleProperty logLowerBound = new SimpleDoubleProperty(); | |
public LogarithmicAxis() { | |
super(1, 100); | |
bindLogBoundsToDefaultBounds(); | |
} | |
public LogarithmicAxis(double lowerBound, double upperBound) { | |
super(lowerBound, upperBound); | |
try { | |
validateBounds(lowerBound, upperBound); | |
bindLogBoundsToDefaultBounds(); | |
} catch (IllegalLogarithmicRangeException e) { | |
e.printStackTrace(); | |
} | |
} | |
/** | |
* Bind our logarithmic bounds with the super class bounds, consider the base 10 logarithmic scale. | |
*/ | |
private void bindLogBoundsToDefaultBounds() { | |
logLowerBound.bind(new DoubleBinding() { | |
{ | |
super.bind(lowerBoundProperty()); | |
} | |
@Override | |
protected double computeValue() { | |
return Math.log10(lowerBoundProperty().get()); | |
} | |
}); | |
logUpperBound.bind(new DoubleBinding() { | |
{ | |
super.bind(upperBoundProperty()); | |
} | |
@Override | |
protected double computeValue() { | |
return Math.log10(upperBoundProperty().get()); | |
} | |
}); | |
} | |
/** | |
* Validate the bounds by throwing an exception if the values are not conform to the mathematics log interval: | |
* ]0,Double.MAX_VALUE] | |
* | |
* @param lowerBound | |
* @param upperBound | |
* @throws IllegalLogarithmicRangeException | |
*/ | |
private void validateBounds(double lowerBound, double upperBound) throws IllegalLogarithmicRangeException { | |
if (lowerBound < 0 || upperBound < 0 || lowerBound > upperBound) { | |
throw new IllegalLogarithmicRangeException( | |
"The logarithmic range should be include to ]0,Double.MAX_VALUE] and the lowerBound should be less than the upperBound"); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment