xyseries.java

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

JAVA
667
字号
/* =========================================================== * 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.] * * ------------- * XYSeries.java * ------------- * (C) Copyright 2001-2005, Object Refinery Limited and Contributors. * * Original Author:  David Gilbert (for Object Refinery Limited); * Contributor(s):   Aaron Metzger; *                   Jonathan Gabbai; *                   Richard Atkinson; *                   Michel Santos; * * $Id: XYSeries.java,v 1.13 2005/05/20 08:20:03 mungady Exp $ * * Changes * ------- * 15-Nov-2001 : Version 1 (DG); * 03-Apr-2002 : Added an add(double, double) method (DG); * 29-Apr-2002 : Added a clear() method (ARM); * 06-Jun-2002 : Updated Javadoc comments (DG); * 29-Aug-2002 : Modified to give user control over whether or not duplicate  *               x-values are allowed (DG); * 07-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 11-Nov-2002 : Added maximum item count, code contributed by Jonathan  *               Gabbai (DG); * 26-Mar-2003 : Implemented Serializable (DG); * 04-Aug-2003 : Added getItems() method (DG); * 15-Aug-2003 : Changed 'data' from private to protected, added new add()  *               methods with a 'notify' argument (DG); * 22-Sep-2003 : Added getAllowDuplicateXValues() method (RA); * 29-Jan-2004 : Added autoSort attribute, based on a contribution by  *               Michel Santos - see patch 886740 (DG); * 03-Feb-2004 : Added indexOf() method (DG); * 16-Feb-2004 : Added remove() method (DG); * 18-Aug-2004 : Moved from org.jfree.data --> org.jfree.data.xy (DG); * 21-Feb-2005 : Added update(Number, Number) and addOrUpdate(Number, Number)  *               methods (DG); * 03-May-2005 : Added a new constructor, fixed the setMaximumItemCount()  *               method to remove items (and notify listeners) if necessary,  *               fixed the add() and addOrUpdate() methods to handle unsorted  *               series (DG); * */package org.jfree.data.xy;import java.io.Serializable;import java.util.Collections;import java.util.List;import org.jfree.data.general.Series;import org.jfree.data.general.SeriesChangeEvent;import org.jfree.data.general.SeriesException;import org.jfree.util.ObjectUtilities;/** * Represents a sequence of zero or more data items in the form (x, y).  By  * default, items in the series will be sorted into ascending order by x-value, * and duplicate x-values are permitted.  Both the sorting and duplicate  * defaults can be changed in the constructor.  Y-values can be  * <code>null</code> to represent missing values. */public class XYSeries extends Series implements Cloneable, Serializable {    /** For serialization. */    static final long serialVersionUID = -5908509288197150436L;        // In version 0.9.12, in response to several developer requests, I changed     // the 'data' attribute from 'private' to 'protected', so that others can     // make subclasses that work directly with the underlying data structure.    /** Storage for the data items in the series. */    protected List data;    /** The maximum number of items for the series. */    private int maximumItemCount = Integer.MAX_VALUE;    /** A flag that controls whether the items are automatically sorted. */    private boolean autoSort;        /** A flag that controls whether or not duplicate x-values are allowed. */    private boolean allowDuplicateXValues;    /**     * Creates a new empty series.  By default, items added to the series will      * be sorted into ascending order by x-value, and duplicate x-values will      * be allowed (these defaults can be modified with another constructor.     *     * @param key  the series key (<code>null</code> not permitted).     */    public XYSeries(Comparable key) {        this(key, true, true);    }    /**     * Constructs a new empty series, with the auto-sort flag set as requested,     * and duplicate values allowed.       *      * @param key  the series key (<code>null</code> not permitted).     * @param autoSort  a flag that controls whether or not the items in the      *                  series are sorted.     */    public XYSeries(Comparable key, boolean autoSort) {        this(key, autoSort, true);    }    /**     * Constructs a new xy-series that contains no data.  You can specify      * whether or not duplicate x-values are allowed for the series.     *     * @param key  the series key (<code>null</code> not permitted).     * @param autoSort  a flag that controls whether or not the items in the      *                  series are sorted.     * @param allowDuplicateXValues  a flag that controls whether duplicate      *                               x-values are allowed.     */    public XYSeries(Comparable key,                     boolean autoSort,                     boolean allowDuplicateXValues) {        super(key);        this.data = new java.util.ArrayList();        this.autoSort = autoSort;        this.allowDuplicateXValues = allowDuplicateXValues;    }    /**     * Returns the flag that controls whether the items in the series are      * automatically sorted.  There is no setter for this flag, it must be      * defined in the series constructor.     *      * @return A boolean.     */    public boolean getAutoSort() {        return this.autoSort;    }        /**     * Returns a flag that controls whether duplicate x-values are allowed.       * This flag can only be set in the constructor.     *     * @return A boolean.     */    public boolean getAllowDuplicateXValues() {        return this.allowDuplicateXValues;    }    /**     * Returns the number of items in the series.     *     * @return The item count.     */    public int getItemCount() {        return this.data.size();    }    /**     * Returns the list of data items for the series (the list contains      * {@link XYDataItem} objects and is unmodifiable).     *      * @return The list of data items.     */    public List getItems() {        return Collections.unmodifiableList(this.data);        }        /**     * Returns the maximum number of items that will be retained in the series.     * The default value is <code>Integer.MAX_VALUE</code>.     *     * @return The maximum item count.     * @see #setMaximumItemCount(int)     */    public int getMaximumItemCount() {        return this.maximumItemCount;    }    /**     * Sets the maximum number of items that will be retained in the series.       * If you add a new item to the series such that the number of items will      * exceed the maximum item count, then the first element in the series is      * automatically removed, ensuring that the maximum item count is not      * exceeded.     * <p>     * Typically this value is set before the series is populated with data,     * but if it is applied later, it may cause some items to be removed from     * the series (in which case a {@link SeriesChangeEvent} will be sent to     * all registered listeners.     *     * @param maximum  the maximum number of items for the series.     */    public void setMaximumItemCount(int maximum) {        this.maximumItemCount = maximum;        boolean dataRemoved = false;        while (this.data.size() > maximum) {            this.data.remove(0);               dataRemoved = true;        }        if (dataRemoved) {            fireSeriesChanged();        }    }    /**     * Adds a data item to the series and sends a {@link SeriesChangeEvent} to      * all registered listeners.     *     * @param item  the (x, y) item (<code>null</code> not permitted).     */    public void add(XYDataItem item) {        // argument checking delegated...        add(item, true);    }        /**     * Adds a data item to the series and sends a {@link SeriesChangeEvent} to      * all registered listeners.     *     * @param x  the x value.     * @param y  the y value.     */    public void add(double x, double y) {        add(new Double(x), new Double(y), true);    }    /**     * Adds a data item to the series and, if requested, sends a      * {@link SeriesChangeEvent} to all registered listeners.     *     * @param x  the x value.     * @param y  the y value.     * @param notify  a flag that controls whether or not a      *                {@link SeriesChangeEvent} is sent to all registered      *                listeners.     */    public void add(double x, double y, boolean notify) {        add(new Double(x), new Double(y), notify);    }    /**     * Adds a data item to the series and sends a {@link SeriesChangeEvent} to      * all registered listeners.  The unusual pairing of parameter types is to      * make it easier to add <code>null</code> y-values.     *     * @param x  the x value.     * @param y  the y value (<code>null</code> permitted).     */    public void add(double x, Number y) {        add(new Double(x), y);    }    /**     * Adds a data item to the series and, if requested, sends a      * {@link SeriesChangeEvent} to all registered listeners.  The unusual      * pairing of parameter types is to make it easier to add null y-values.     *     * @param x  the x value.     * @param y  the y value (<code>null</code> permitted).     * @param notify  a flag that controls whether or not a      *                {@link SeriesChangeEvent} is sent to all registered      *                listeners.     */    public void add(double x, Number y, boolean notify) {        add(new Double(x), y, notify);    }    /**     * Adds new data to the series and sends a {@link SeriesChangeEvent} to      * all registered listeners.     * <P>     * Throws an exception if the x-value is a duplicate AND the      * allowDuplicateXValues flag is false.     *     * @param x  the x-value (<code>null</code> not permitted).     * @param y  the y-value (<code>null</code> permitted).     */    public void add(Number x, Number y) {        // argument checking delegated...        add(x, y, true);    }        /**     * Adds new data to the series and, if requested, sends a      * {@link SeriesChangeEvent} to all registered listeners.     * <P>     * Throws an exception if the x-value is a duplicate AND the      * allowDuplicateXValues flag is false.     *     * @param x  the x-value (<code>null</code> not permitted).     * @param y  the y-value (<code>null</code> permitted).     * @param notify  a flag the controls whether or not a      *                {@link SeriesChangeEvent} is sent to all registered      *                listeners.     */    public void add(Number x, Number y, boolean notify) {        if (x == null) {            throw new IllegalArgumentException("Null 'x' argument.");        }        XYDataItem item = new XYDataItem(x, y);        add(item, notify);    }    /**     * Adds a data item to the series and, if requested, sends a      * {@link SeriesChangeEvent} to all registered listeners.     *     * @param item  the (x, y) item (<code>null</code> not permitted).     * @param notify  a flag that controls whether or not a      *                {@link SeriesChangeEvent} is sent to all registered      *                listeners.     */

⌨️ 快捷键说明

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