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 + -
显示快捷键?