defaultintervalcategorydataset.java

来自「JfreeChart 常用图表例子」· Java 代码 · 共 756 行 · 第 1/2 页

JAVA
756
字号
/* =========================================================== * JFreeChart : a free chart library for the Java(tm) platform * =========================================================== * * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors. * * Project Info:  http://www.jfree.org/jfreechart/index.html * * This library is free software; you can redistribute it and/or modify it  * under the terms of the GNU Lesser General Public License as published by  * the Free Software Foundation; either version 2.1 of the License, or  * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY  * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public  * License for more details. * * You should have received a copy of the GNU Lesser General Public License  * along with this library; if not, write to the Free Software Foundation,  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc.  * in the United States and other countries.] * * ----------------------------------- * DefaultIntervalCategoryDataset.java * ----------------------------------- * (C) Copyright 2002-2005, by Jeremy Bowman and Contributors. * * Original Author:  Jeremy Bowman; * Contributor(s):   David Gilbert (for Object Refinery Limited); * * $Id: DefaultIntervalCategoryDataset.java,v 1.9 2005/05/20 08:20:04 mungady Exp $ * * Changes * ------- * 29-Apr-2002 : Version 1, contributed by Jeremy Bowman (DG); * 24-Oct-2002 : Amendments for changes made to the dataset interface (DG); * */package org.jfree.data.category;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.ResourceBundle;import org.jfree.data.DataUtilities;import org.jfree.data.general.AbstractSeriesDataset;/** * A convenience class that provides a default implementation of the * {@link IntervalCategoryDataset} interface. * <p> * The standard constructor accepts data in a two dimensional array where the * first dimension is the series, and the second dimension is the category. * * @author Jeremy Bowman */public class DefaultIntervalCategoryDataset extends AbstractSeriesDataset                                            implements IntervalCategoryDataset {    /** The series keys. */    private Comparable[] seriesKeys;    /** The category keys. */    private Comparable[] categoryKeys;    /** Storage for the start value data. */    private Number[][] startData;    /** Storage for the end value data. */    private Number[][] endData;    /**     * Creates a new dataset.     *     * @param starts  the starting values for the intervals.     * @param ends  the ending values for the intervals.     */    public DefaultIntervalCategoryDataset(double[][] starts, double[][] ends) {        this(            DataUtilities.createNumberArray2D(starts),            DataUtilities.createNumberArray2D(ends)        );    }    /**     * Constructs a dataset and populates it with data from the array.     * <p>     * The arrays are indexed as data[series][category].  Series and category     * names are automatically generated - you can change them using the     * {@link #setSeriesKeys(Comparable[])} and      * {@link #setCategoryKeys(Comparable[])} methods.     *     * @param starts  the start values data.     * @param ends  the end values data.     */    public DefaultIntervalCategoryDataset(Number[][] starts, Number[][] ends) {        this(null, null, starts, ends);    }    /**     * Constructs a DefaultIntervalCategoryDataset, populates it with data     * from the arrays, and uses the supplied names for the series.     * <p>     * Category names are generated automatically ("Category 1", "Category 2",     * etc).     *     * @param seriesNames  the series names.     * @param starts  the start values data, indexed as data[series][category].     * @param ends  the end values data, indexed as data[series][category].     */    public DefaultIntervalCategoryDataset(String[] seriesNames,                                          Number[][] starts,                                          Number[][] ends) {        this(seriesNames, null, starts, ends);    }    /**     * Constructs a DefaultIntervalCategoryDataset, populates it with data     * from the arrays, and uses the supplied names for the series and the     * supplied objects for the categories.     *     * @param seriesKeys the series keys.     * @param categoryKeys  the categories.     * @param starts  the start values data, indexed as data[series][category].     * @param ends  the end values data, indexed as data[series][category].     */    public DefaultIntervalCategoryDataset(Comparable[] seriesKeys,                                          Comparable[] categoryKeys,                                          Number[][] starts,                                          Number[][] ends) {        this.startData = starts;        this.endData = ends;        if (starts != null && ends != null) {            String baseName = "org.jfree.data.resources.DataPackageResources";            ResourceBundle resources = ResourceBundle.getBundle(baseName);            int seriesCount = starts.length;            if (seriesCount != ends.length) {                String errMsg = "DefaultIntervalCategoryDataset: the number "                    + "of series in the start value dataset does "                    + "not match the number of series in the end "                    + "value dataset.";                throw new IllegalArgumentException(errMsg);            }            if (seriesCount > 0) {                // set up the series names...                if (seriesKeys != null) {                    if (seriesKeys.length != seriesCount) {                        throw new IllegalArgumentException(                            "The number of series keys does "                            + "not match the number of series in the data."                        );                    }                    this.seriesKeys = seriesKeys;                }                else {                    String prefix                         = resources.getString("series.default-prefix") + " ";                    this.seriesKeys = generateKeys(seriesCount, prefix);                }                // set up the category names...                int categoryCount = starts[0].length;                if (categoryCount != ends[0].length) {                    String errMsg = "DefaultIntervalCategoryDataset: the "                                + "number of categories in the start value "                                + "dataset does not match the number of "                                + "categories in the end value dataset.";                    throw new IllegalArgumentException(errMsg);                }                if (categoryKeys != null) {                    if (categoryKeys.length != categoryCount) {                        throw new IllegalArgumentException(                            "The number of category keys does "                            + "not match the number of categories in the data."                        );                    }                    this.categoryKeys = categoryKeys;                }                else {                    String prefix = resources.getString(                        "categories.default-prefix"                    ) + " ";                    this.categoryKeys = generateKeys(categoryCount, prefix);                }            }            else {                this.seriesKeys = null;                this.categoryKeys = null;            }        }    }    /**     * Returns the number of series in the dataset (possibly zero).     *     * @return The number of series in the dataset.     */    public int getSeriesCount() {        int result = 0;        if (this.startData != null) {            result = this.startData.length;        }        return result;    }    /**     * Returns the item count.     *     * @return The item count.     */    public int getItemCount() {        return this.categoryKeys.length;    }    /**     * Returns a category key.     *     * @param item  the category index.     *     * @return The category key.     */    public Comparable getCategory(int item) {        return this.categoryKeys[item];    }    /**     * Returns an item.     *     * @param category  the category key.     *     * @return The item index.     */    public int getItem(Object category) {        List categories = getCategories();        return categories.indexOf(category);    }    /**     * Returns a series index.     *     * @param series  the series.     *     * @return The series index.     */    public int getSeriesIndex(Object series) {        List seriesKeys = getSeries();        return seriesKeys.indexOf(series);    }    /**     * Returns the name of the specified series.     *     * @param series  the index of the required series (zero-based).     *     * @return The name of the specified series.     */    public Comparable getSeries(int series) {        // check argument...        if ((series >= getSeriesCount()) || (series < 0)) {            throw new IllegalArgumentException(                "DefaultCategoryDataset.getSeriesName(int): no such series.");        }        // return the value...        return this.seriesKeys[series];    }    /**     * Returns the name of the specified series.     *     * @param series  the index of the required series (zero-based).     *     * @return The name of the specified series.     */    public Comparable getSeriesKey(int series) {        if ((series >= getSeriesCount()) || (series < 0)) {            throw new IllegalArgumentException("No such series : " + series);        }        return this.seriesKeys[series];    }    /**     * Sets the names of the series in the dataset.     *     * @param seriesKeys  the keys of the series in the dataset.     */    public void setSeriesKeys(Comparable[] seriesKeys) {        // check argument...        if (seriesKeys == null) {            throw new IllegalArgumentException("Null 'seriesKeys' argument.");        }        if (seriesKeys.length != getSeriesCount()) {            throw new IllegalArgumentException(                "DefaultIntervalCategoryDataset.setSeriesKeys(): "                + "the number of series keys does not match the data."            );        }        // make the change...        this.seriesKeys = seriesKeys;        fireDatasetChanged();    }    /**     * Returns the number of categories in the dataset.     * <P>     * This method is part of the CategoryDataset interface.     *     * @return The number of categories in the dataset.     */    public int getCategoryCount() {        int result = 0;        if (this.startData != null) {            if (getSeriesCount() > 0) {                result = this.startData[0].length;            }        }        return result;    }    /**     * Returns a list of the series in the dataset.     * <P>     * Supports the CategoryDataset interface.     *     * @return A list of the series in the dataset.     */    public List getSeries() {        // the CategoryDataset interface expects a list of series, but        // we've stored them in an array...        if (this.seriesKeys == null) {            return new java.util.ArrayList();        }        else {            return Collections.unmodifiableList(Arrays.asList(this.seriesKeys));        }    }    /**     * Returns a list of the categories in the dataset.     * <P>     * Supports the CategoryDataset interface.     *     * @return A list of the categories in the dataset.     */    public List getCategories() {        return getColumnKeys();    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?