numberaxis.java
来自「JfreeChart 常用图表例子」· Java 代码 · 共 1,302 行 · 第 1/4 页
JAVA
1,302 行
DecimalFormat df9 = new DecimalFormat("#,###,##0"); DecimalFormat df10 = new DecimalFormat("#,###,###,##0"); // we can add the units in any order, the TickUnits collection will // sort them... units.add(new NumberTickUnit(0.0000001, df1)); units.add(new NumberTickUnit(0.000001, df2)); units.add(new NumberTickUnit(0.00001, df3)); units.add(new NumberTickUnit(0.0001, df4)); units.add(new NumberTickUnit(0.001, df5)); units.add(new NumberTickUnit(0.01, df6)); units.add(new NumberTickUnit(0.1, df7)); units.add(new NumberTickUnit(1, df8)); units.add(new NumberTickUnit(10, df8)); units.add(new NumberTickUnit(100, df8)); units.add(new NumberTickUnit(1000, df8)); units.add(new NumberTickUnit(10000, df8)); units.add(new NumberTickUnit(100000, df8)); units.add(new NumberTickUnit(1000000, df9)); units.add(new NumberTickUnit(10000000, df9)); units.add(new NumberTickUnit(100000000, df9)); units.add(new NumberTickUnit(1000000000, df10)); units.add(new NumberTickUnit(10000000000.0, df10)); units.add(new NumberTickUnit(100000000000.0, df10)); units.add(new NumberTickUnit(0.00000025, df0)); units.add(new NumberTickUnit(0.0000025, df1)); units.add(new NumberTickUnit(0.000025, df2)); units.add(new NumberTickUnit(0.00025, df3)); units.add(new NumberTickUnit(0.0025, df4)); units.add(new NumberTickUnit(0.025, df5)); units.add(new NumberTickUnit(0.25, df6)); units.add(new NumberTickUnit(2.5, df7)); units.add(new NumberTickUnit(25, df8)); units.add(new NumberTickUnit(250, df8)); units.add(new NumberTickUnit(2500, df8)); units.add(new NumberTickUnit(25000, df8)); units.add(new NumberTickUnit(250000, df8)); units.add(new NumberTickUnit(2500000, df9)); units.add(new NumberTickUnit(25000000, df9)); units.add(new NumberTickUnit(250000000, df9)); units.add(new NumberTickUnit(2500000000.0, df10)); units.add(new NumberTickUnit(25000000000.0, df10)); units.add(new NumberTickUnit(250000000000.0, df10)); units.add(new NumberTickUnit(0.0000005, df1)); units.add(new NumberTickUnit(0.000005, df2)); units.add(new NumberTickUnit(0.00005, df3)); units.add(new NumberTickUnit(0.0005, df4)); units.add(new NumberTickUnit(0.005, df5)); units.add(new NumberTickUnit(0.05, df6)); units.add(new NumberTickUnit(0.5, df7)); units.add(new NumberTickUnit(5L, df8)); units.add(new NumberTickUnit(50L, df8)); units.add(new NumberTickUnit(500L, df8)); units.add(new NumberTickUnit(5000L, df8)); units.add(new NumberTickUnit(50000L, df8)); units.add(new NumberTickUnit(500000L, df8)); units.add(new NumberTickUnit(5000000L, df9)); units.add(new NumberTickUnit(50000000L, df9)); units.add(new NumberTickUnit(500000000L, df9)); units.add(new NumberTickUnit(5000000000L, df10)); units.add(new NumberTickUnit(50000000000L, df10)); units.add(new NumberTickUnit(500000000000L, df10)); 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(); DecimalFormat df0 = new DecimalFormat("0"); DecimalFormat df1 = new DecimalFormat("#,##0"); units.add(new NumberTickUnit(1, df0)); units.add(new NumberTickUnit(2, df0)); units.add(new NumberTickUnit(5, df0)); units.add(new NumberTickUnit(10, df0)); units.add(new NumberTickUnit(20, df0)); units.add(new NumberTickUnit(50, df0)); units.add(new NumberTickUnit(100, df0)); units.add(new NumberTickUnit(200, df0)); units.add(new NumberTickUnit(500, df0)); units.add(new NumberTickUnit(1000, df1)); units.add(new NumberTickUnit(2000, df1)); units.add(new NumberTickUnit(5000, df1)); units.add(new NumberTickUnit(10000, df1)); units.add(new NumberTickUnit(20000, df1)); units.add(new NumberTickUnit(50000, df1)); units.add(new NumberTickUnit(100000, df1)); units.add(new NumberTickUnit(200000, df1)); units.add(new NumberTickUnit(500000, df1)); units.add(new NumberTickUnit(1000000, df1)); units.add(new NumberTickUnit(2000000, df1)); units.add(new NumberTickUnit(5000000, df1)); units.add(new NumberTickUnit(10000000, df1)); units.add(new NumberTickUnit(20000000, df1)); units.add(new NumberTickUnit(50000000, df1)); units.add(new NumberTickUnit(100000000, df1)); units.add(new NumberTickUnit(200000000, df1)); units.add(new NumberTickUnit(500000000, df1)); units.add(new NumberTickUnit(1000000000, df1)); units.add(new NumberTickUnit(2000000000, df1)); units.add(new NumberTickUnit(5000000000.0, df1)); units.add(new NumberTickUnit(10000000000.0, df1)); 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) { RectangleInsets tickLabelInsets = getTickLabelInsets(); double result = tickLabelInsets.getTop() + tickLabelInsets.getBottom(); 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 unit the tick unit to use for calculation. * * @return The estimated maximum width of the tick labels. */ protected double estimateMaximumTickLabelWidth(Graphics2D g2, TickUnit unit) { RectangleInsets tickLabelInsets = getTickLabelInsets(); double result = tickLabelInsets.getLeft() + tickLabelInsets.getRight(); 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 = unit.valueToString(lower); String upperStr = unit.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 dataArea the area defined by the axes. * @param edge the axis location. */ protected void selectAutoTickUnit(Graphics2D g2, Rectangle2D dataArea, RectangleEdge edge) { if (RectangleEdge.isTopOrBottom(edge)) { selectHorizontalAutoTickUnit(g2, dataArea, edge); } else if (RectangleEdge.isLeftOrRight(edge)) {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?