📄 numberaxis.java
字号:
units.add(new NumberTickUnit(10000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(100000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(1000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(10000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(100000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(1000000000, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(10000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(100000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(0.00000025, new DecimalFormat("0.00000000")));
units.add(new NumberTickUnit(0.0000025, new DecimalFormat("0.0000000")));
units.add(new NumberTickUnit(0.000025, new DecimalFormat("0.000000")));
units.add(new NumberTickUnit(0.00025, new DecimalFormat("0.00000")));
units.add(new NumberTickUnit(0.0025, new DecimalFormat("0.0000")));
units.add(new NumberTickUnit(0.025, new DecimalFormat("0.000")));
units.add(new NumberTickUnit(0.25, new DecimalFormat("0.00")));
units.add(new NumberTickUnit(2.5, new DecimalFormat("0.0")));
units.add(new NumberTickUnit(25, new DecimalFormat("0")));
units.add(new NumberTickUnit(250, new DecimalFormat("0")));
units.add(new NumberTickUnit(2500, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(25000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(250000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2500000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(25000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(250000000, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(2500000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(25000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(250000000000.0, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(0.0000005, new DecimalFormat("0.0000000")));
units.add(new NumberTickUnit(0.000005, new DecimalFormat("0.000000")));
units.add(new NumberTickUnit(0.00005, new DecimalFormat("0.00000")));
units.add(new NumberTickUnit(0.0005, new DecimalFormat("0.0000")));
units.add(new NumberTickUnit(0.005, new DecimalFormat("0.000")));
units.add(new NumberTickUnit(0.05, new DecimalFormat("0.00")));
units.add(new NumberTickUnit(0.5, new DecimalFormat("0.0")));
units.add(new NumberTickUnit(5L, new DecimalFormat("0")));
units.add(new NumberTickUnit(50L, new DecimalFormat("0")));
units.add(new NumberTickUnit(500L, new DecimalFormat("0")));
units.add(new NumberTickUnit(5000L, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(50000L, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(500000L, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000000L, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(50000000L, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(500000000L, new DecimalFormat("#,###,##0")));
units.add(new NumberTickUnit(5000000000L, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(50000000000L, new DecimalFormat("#,###,###,##0")));
units.add(new NumberTickUnit(500000000000L, new DecimalFormat("#,###,###,##0")));
return units;
}
/**
* Returns a collection of tick units for integer values.
*
* @return a collection of tick units for integer values.
*/
public static TickUnitSource createIntegerTickUnits() {
TickUnits units = new TickUnits();
units.add(new NumberTickUnit(1, new DecimalFormat("0")));
units.add(new NumberTickUnit(2, new DecimalFormat("0")));
units.add(new NumberTickUnit(5, new DecimalFormat("0")));
units.add(new NumberTickUnit(10, new DecimalFormat("0")));
units.add(new NumberTickUnit(20, new DecimalFormat("0")));
units.add(new NumberTickUnit(50, new DecimalFormat("0")));
units.add(new NumberTickUnit(100, new DecimalFormat("0")));
units.add(new NumberTickUnit(200, new DecimalFormat("0")));
units.add(new NumberTickUnit(500, new DecimalFormat("0")));
units.add(new NumberTickUnit(1000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(10000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(20000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(50000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(100000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(200000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(500000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(1000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(10000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(20000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(50000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(100000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(200000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(500000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(1000000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(2000000000, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(5000000000.0, new DecimalFormat("#,##0")));
units.add(new NumberTickUnit(10000000000.0, new DecimalFormat("#,##0")));
return units;
}
/**
* Creates a collection of standard tick units. The supplied locale is used to create the
* number formatter (a localised instance of <code>NumberFormat</code>).
* <P>
* If you don't like these defaults, create your own instance of {@link TickUnits}
* and then pass it to the <code>setStandardTickUnits(...)</code> method.
*
* @param locale the locale.
*
* @return a tick unit collection.
*/
public static TickUnitSource createStandardTickUnits(Locale locale) {
TickUnits units = new TickUnits();
NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
// we can add the units in any order, the TickUnits collection will sort them...
units.add(new NumberTickUnit(0.0000001, numberFormat));
units.add(new NumberTickUnit(0.000001, numberFormat));
units.add(new NumberTickUnit(0.00001, numberFormat));
units.add(new NumberTickUnit(0.0001, numberFormat));
units.add(new NumberTickUnit(0.001, numberFormat));
units.add(new NumberTickUnit(0.01, numberFormat));
units.add(new NumberTickUnit(0.1, numberFormat));
units.add(new NumberTickUnit(1, numberFormat));
units.add(new NumberTickUnit(10, numberFormat));
units.add(new NumberTickUnit(100, numberFormat));
units.add(new NumberTickUnit(1000, numberFormat));
units.add(new NumberTickUnit(10000, numberFormat));
units.add(new NumberTickUnit(100000, numberFormat));
units.add(new NumberTickUnit(1000000, numberFormat));
units.add(new NumberTickUnit(10000000, numberFormat));
units.add(new NumberTickUnit(100000000, numberFormat));
units.add(new NumberTickUnit(1000000000, numberFormat));
units.add(new NumberTickUnit(10000000000.0, numberFormat));
units.add(new NumberTickUnit(0.00000025, numberFormat));
units.add(new NumberTickUnit(0.0000025, numberFormat));
units.add(new NumberTickUnit(0.000025, numberFormat));
units.add(new NumberTickUnit(0.00025, numberFormat));
units.add(new NumberTickUnit(0.0025, numberFormat));
units.add(new NumberTickUnit(0.025, numberFormat));
units.add(new NumberTickUnit(0.25, numberFormat));
units.add(new NumberTickUnit(2.5, numberFormat));
units.add(new NumberTickUnit(25, numberFormat));
units.add(new NumberTickUnit(250, numberFormat));
units.add(new NumberTickUnit(2500, numberFormat));
units.add(new NumberTickUnit(25000, numberFormat));
units.add(new NumberTickUnit(250000, numberFormat));
units.add(new NumberTickUnit(2500000, numberFormat));
units.add(new NumberTickUnit(25000000, numberFormat));
units.add(new NumberTickUnit(250000000, numberFormat));
units.add(new NumberTickUnit(2500000000.0, numberFormat));
units.add(new NumberTickUnit(25000000000.0, numberFormat));
units.add(new NumberTickUnit(0.0000005, numberFormat));
units.add(new NumberTickUnit(0.000005, numberFormat));
units.add(new NumberTickUnit(0.00005, numberFormat));
units.add(new NumberTickUnit(0.0005, numberFormat));
units.add(new NumberTickUnit(0.005, numberFormat));
units.add(new NumberTickUnit(0.05, numberFormat));
units.add(new NumberTickUnit(0.5, numberFormat));
units.add(new NumberTickUnit(5L, numberFormat));
units.add(new NumberTickUnit(50L, numberFormat));
units.add(new NumberTickUnit(500L, numberFormat));
units.add(new NumberTickUnit(5000L, numberFormat));
units.add(new NumberTickUnit(50000L, numberFormat));
units.add(new NumberTickUnit(500000L, numberFormat));
units.add(new NumberTickUnit(5000000L, numberFormat));
units.add(new NumberTickUnit(50000000L, numberFormat));
units.add(new NumberTickUnit(500000000L, numberFormat));
units.add(new NumberTickUnit(5000000000L, numberFormat));
units.add(new NumberTickUnit(50000000000L, numberFormat));
return units;
}
/**
* Returns a collection of tick units for integer values.
* Uses a given Locale to create the DecimalFormats.
*
* @param locale the locale to use to represent Numbers.
*
* @return a collection of tick units for integer values.
*/
public static TickUnitSource createIntegerTickUnits(Locale locale) {
TickUnits units = new TickUnits();
NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);
units.add(new NumberTickUnit(1, numberFormat));
units.add(new NumberTickUnit(2, numberFormat));
units.add(new NumberTickUnit(5, numberFormat));
units.add(new NumberTickUnit(10, numberFormat));
units.add(new NumberTickUnit(20, numberFormat));
units.add(new NumberTickUnit(50, numberFormat));
units.add(new NumberTickUnit(100, numberFormat));
units.add(new NumberTickUnit(200, numberFormat));
units.add(new NumberTickUnit(500, numberFormat));
units.add(new NumberTickUnit(1000, numberFormat));
units.add(new NumberTickUnit(2000, numberFormat));
units.add(new NumberTickUnit(5000, numberFormat));
units.add(new NumberTickUnit(10000, numberFormat));
units.add(new NumberTickUnit(20000, numberFormat));
units.add(new NumberTickUnit(50000, numberFormat));
units.add(new NumberTickUnit(100000, numberFormat));
units.add(new NumberTickUnit(200000, numberFormat));
units.add(new NumberTickUnit(500000, numberFormat));
units.add(new NumberTickUnit(1000000, numberFormat));
units.add(new NumberTickUnit(2000000, numberFormat));
units.add(new NumberTickUnit(5000000, numberFormat));
units.add(new NumberTickUnit(10000000, numberFormat));
units.add(new NumberTickUnit(20000000, numberFormat));
units.add(new NumberTickUnit(50000000, numberFormat));
units.add(new NumberTickUnit(100000000, numberFormat));
units.add(new NumberTickUnit(200000000, numberFormat));
units.add(new NumberTickUnit(500000000, numberFormat));
units.add(new NumberTickUnit(1000000000, numberFormat));
units.add(new NumberTickUnit(2000000000, numberFormat));
units.add(new NumberTickUnit(5000000000.0, numberFormat));
units.add(new NumberTickUnit(10000000000.0, numberFormat));
return units;
}
/**
* Estimates the maximum tick label height.
*
* @param g2 the graphics device.
*
* @return The maximum height.
*/
protected double estimateMaximumTickLabelHeight(Graphics2D g2) {
Insets tickLabelInsets = getTickLabelInsets();
double result = tickLabelInsets.top + tickLabelInsets.bottom;
Font tickLabelFont = getTickLabelFont();
FontRenderContext frc = g2.getFontRenderContext();
result += tickLabelFont.getLineMetrics("123", frc).getHeight();
return result;
}
/**
* Estimates the maximum width of the tick labels, assuming the specified tick unit is used.
* <P>
* Rather than computing the string bounds of every tick on the axis, we just look at two
* values: the lower bound and the upper bound for the axis. These two values will usually
* be representative.
*
* @param g2 the graphics device.
* @param tickUnit the tick unit to use for calculation.
*
* @return the estimated maximum width of the tick labels.
*/
protected double estimateMaximumTickLabelWidth(Graphics2D g2, TickUnit tickUnit) {
Insets tickLabelInsets = getTickLabelInsets();
double result = tickLabelInsets.left + tickLabelInsets.right;
if (isVerticalTickLabels()) {
// all tick labels have the same width (equal to the height of the font)...
FontRenderContext frc = g2.getFontRenderContext();
LineMetrics lm = getTickLabelFont().getLineMetrics("0", frc);
result += lm.getHeight();
}
else {
// look at lower and upper bounds...
FontMetrics fm = g2.getFontMetrics(getTickLabelFont());
Range range = getRange();
double lower = range.getLowerBound();
double upper = range.getUpperBound();
String lowerStr = tickUnit.valueToString(lower);
String upperStr = tickUnit.valueToString(upper);
double w1 = fm.stringWidth(lowerStr);
double w2 = fm.stringWidth(upperStr);
result += Math.max(w1, w2);
}
return result;
}
/**
* Selects an appropriate tick value for the axis. The strategy is to
* display as many ticks as possible (selected from an array of 'standard'
* tick units) without the labels overlapping.
*
* @param g2 the graphics device.
* @param drawArea the area in which the plot and axes should be drawn.
* @param dataArea the area defined by the axes.
* @param edge the axis location.
*/
protected void selectAutoTickUnit(Graphics2D g2, Rectangle2D drawArea, Rectangle2D dataArea,
RectangleEdge edge) {
if (RectangleEdge.isTopOrBottom(edge)) {
selectHorizontalAutoTickUnit(g2, drawArea, dataArea, edge);
}
else if (RectangleEdge.isLeftOrRight(edge)) {
selectVerticalAutoTickUnit(g2, drawArea, dataArea, edge);
}
}
/**
* Selects an appropriate tick value for the axis. The strategy is to
* display as many ticks as possible (selected from an array of 'standard'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -