timeseriescollection.java
来自「JfreeChart 常用图表例子」· Java 代码 · 共 635 行 · 第 1/2 页
JAVA
635 行
/* =========================================================== * 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.] * * ------------------------- * TimeSeriesCollection.java * ------------------------- * (C) Copyright 2001-2005, by Object Refinery Limited. * * Original Author: David Gilbert (for Object Refinery Limited); * Contributor(s): -; * * $Id: TimeSeriesCollection.java,v 1.10 2005/05/20 08:20:03 mungady Exp $ * * Changes * ------- * 11-Oct-2001 : Version 1 (DG); * 18-Oct-2001 : Added implementation of IntervalXYDataSource so that bar plots * (using numerical axes) can be plotted from time series * data (DG); * 22-Oct-2001 : Renamed DataSource.java --> Dataset.java etc. (DG); * 15-Nov-2001 : Added getSeries() method. Changed name from TimeSeriesDataset * to TimeSeriesCollection (DG); * 07-Dec-2001 : TimeSeries --> BasicTimeSeries (DG); * 01-Mar-2002 : Added a time zone offset attribute, to enable fast calculation * of the time period start and end values (DG); * 29-Mar-2002 : The collection now registers itself with all the time series * objects as a SeriesChangeListener. Removed redundant * calculateZoneOffset method (DG); * 06-Jun-2002 : Added a setting to control whether the x-value supplied in the * getXValue() method comes from the START, MIDDLE, or END of the * time period. This is a workaround for JFreeChart, where the * current date axis always labels the start of a time * period (DG); * 24-Jun-2002 : Removed unnecessary import (DG); * 24-Aug-2002 : Implemented DomainInfo interface, and added the * DomainIsPointsInTime flag (DG); * 07-Oct-2002 : Fixed errors reported by Checkstyle (DG); * 16-Oct-2002 : Added remove methods (DG); * 10-Jan-2003 : Changed method names in RegularTimePeriod class (DG); * 13-Mar-2003 : Moved to com.jrefinery.data.time package and implemented * Serializable (DG); * 04-Sep-2003 : Added getSeries(String) method (DG); * 15-Sep-2003 : Added a removeAllSeries() method to match * XYSeriesCollection (DG); * 05-May-2004 : Now extends AbstractIntervalXYDataset (DG); * 15-Jul-2004 : Switched getX() with getXValue() and getY() with * getYValue() (DG); * 06-Oct-2004 : Updated for changed in DomainInfo interface (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 * release (DG); * 28-Mar-2005 : Fixed bug in getSeries(int) method (1170825) (DG); * */package org.jfree.data.time;import java.io.Serializable;import java.util.ArrayList;import java.util.Calendar;import java.util.Collections;import java.util.Iterator;import java.util.List;import java.util.TimeZone;import org.jfree.data.DomainInfo;import org.jfree.data.Range;import org.jfree.data.general.DatasetChangeEvent;import org.jfree.data.xy.AbstractIntervalXYDataset;import org.jfree.data.xy.IntervalXYDataset;import org.jfree.data.xy.XYDataset;import org.jfree.util.ObjectUtilities;/** * A collection of time series objects. This class implements the * {@link org.jfree.data.xy.XYDataset} interface, as well as the extended * {@link IntervalXYDataset} interface. This makes it a convenient dataset for * use with the {@link org.jfree.chart.plot.XYPlot} class. */public class TimeSeriesCollection extends AbstractIntervalXYDataset implements XYDataset, IntervalXYDataset, DomainInfo, Serializable { /** For serialization. */ private static final long serialVersionUID = 834149929022371137L; /** Storage for the time series. */ private List data; /** A working calendar (to recycle) */ private Calendar workingCalendar; /** * The point within each time period that is used for the X value when this * collection is used as an {@link org.jfree.data.xy.XYDataset}. This can * be the start, middle or end of the time period. */ private TimePeriodAnchor xPosition; /** * A flag that indicates that the domain is 'points in time'. If this * flag is true, only the x-value is used to determine the range of values * in the domain, the start and end x-values are ignored. */ private boolean domainIsPointsInTime; /** * Constructs an empty dataset, tied to the default timezone. */ public TimeSeriesCollection() { this(null, TimeZone.getDefault()); } /** * Constructs an empty dataset, tied to a specific timezone. * * @param zone the timezone (<code>null</code> permitted, will use * <code>TimeZone.getDefault()</code> in that case). */ public TimeSeriesCollection(TimeZone zone) { this(null, zone); } /** * Constructs a dataset containing a single series (more can be added), * tied to the default timezone. * * @param series the series (<code>null</code> permitted). */ public TimeSeriesCollection(TimeSeries series) { this(series, TimeZone.getDefault()); } /** * Constructs a dataset containing a single series (more can be added), * tied to a specific timezone. * * @param series a series to add to the collection (<code>null</code> * permitted). * @param zone the timezone (<code>null</code> permitted, will use * <code>TimeZone.getDefault()</code> in that case). */ public TimeSeriesCollection(TimeSeries series, TimeZone zone) { if (zone == null) { zone = TimeZone.getDefault(); } this.workingCalendar = Calendar.getInstance(zone); this.data = new ArrayList(); if (series != null) { this.data.add(series); series.addChangeListener(this); } this.xPosition = TimePeriodAnchor.START; this.domainIsPointsInTime = true; } /** * Returns a flag that controls whether the domain is treated as 'points in * time'. This flag is used when determining the max and min values for * the domain. If <code>true</code>, then only the x-values are considered * for the max and min values. If <code>false</code>, then the start and * end x-values will also be taken into consideration. * * @return The flag. */ public boolean getDomainIsPointsInTime() { return this.domainIsPointsInTime; } /** * Sets a flag that controls whether the domain is treated as 'points in * time', or time periods. * * @param flag the flag. */ public void setDomainIsPointsInTime(boolean flag) { this.domainIsPointsInTime = flag; notifyListeners(new DatasetChangeEvent(this, this)); } /** * Returns the position within each time period that is used for the X * value when the collection is used as an * {@link org.jfree.data.xy.XYDataset}. * * @return The anchor position (never <code>null</code>). */ public TimePeriodAnchor getXPosition() { return this.xPosition; } /** * Sets the position within each time period that is used for the X values * when the collection is used as an {@link XYDataset}, then sends a * {@link DatasetChangeEvent} is sent to all registered listeners. * * @param anchor the anchor position (<code>null</code> not permitted). */ public void setXPosition(TimePeriodAnchor anchor) { if (anchor == null) { throw new IllegalArgumentException("Null 'anchor' argument."); } this.xPosition = anchor; notifyListeners(new DatasetChangeEvent(this, this)); } /** * Returns a list of all the series in the collection. * * @return The list (which is unmodifiable). */ public List getSeries() { return Collections.unmodifiableList(this.data); } /** * Returns the number of series in the collection. * * @return The series count. */ public int getSeriesCount() { return this.data.size(); } /** * Returns a series. * * @param series the index of the series (zero-based). * * @return The series. */ public TimeSeries getSeries(int series) { if ((series < 0) || (series >= getSeriesCount())) { throw new IllegalArgumentException( "The 'series' argument is out of bounds (" + series + ")." ); } return (TimeSeries) this.data.get(series); } /** * Returns the series with the specified key, or <code>null</code> if * there is no such series. * * @param key the series key (<code>null</code> permitted). * * @return The series with the given key. */ public TimeSeries getSeries(String key) { TimeSeries result = null; Iterator iterator = this.data.iterator(); while (iterator.hasNext()) { TimeSeries series = (TimeSeries) iterator.next(); Comparable k = series.getKey(); if (k != null && k.equals(key)) { result = series; } } return result; } /** * Returns the key for a series. * * @param series the index of the series (zero-based). * * @return The key for a series. */ public Comparable getSeriesKey(int series) { // check arguments...delegated // fetch the series name... return getSeries(series).getKey(); } /** * Adds a series to the collection and sends a {@link DatasetChangeEvent} to * all registered listeners. * * @param series the series (<code>null</code> not permitted). */ public void addSeries(TimeSeries series) { if (series == null) { throw new IllegalArgumentException("Null 'series' argument."); } this.data.add(series); series.addChangeListener(this); fireDatasetChanged(); } /** * Removes the specified series from the collection and sends a * {@link DatasetChangeEvent} to all registered listeners. *
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?