timetablexydataset.java
来自「JfreeChart 常用图表例子」· Java 代码 · 共 552 行 · 第 1/2 页
JAVA
552 行
/* =========================================================== * 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.] * * ----------------------- * TimeTableXYDataset.java * ----------------------- * (C) Copyright 2004, 2005, by Andreas Schroeder and Contributors. * * Original Author: Andreas Schroeder; * Contributor(s): David Gilbert (for Object Refinery Limited); * * $Id: TimeTableXYDataset.java,v 1.10 2005/05/20 08:20:03 mungady Exp $ * * Changes * ------- * 01-Apr-2004 : Version 1 (AS); * 05-May-2004 : Now implements AbstractIntervalXYDataset (DG); * 15-Jul-2004 : Switched getX() with getXValue() and getY() with * getYValue() (DG); * 15-Sep-2004 : Added getXPosition(), setXPosition(), equals() and * clone() (DG); * 17-Nov-2004 : Updated methods for changes in DomainInfo interface (DG); * 25-Nov-2004 : Added getTimePeriod(int) method (DG); * 11-Jan-2005 : Removed deprecated code in preparation for the 1.0.0 * release (DG); * 27-Jan-2005 : Modified to use TimePeriod rather than RegularTimePeriod (DG); * */package org.jfree.data.time;import java.util.Calendar;import java.util.List;import java.util.Locale;import java.util.TimeZone;import org.jfree.data.DefaultKeyedValues2D;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.TableXYDataset;import org.jfree.util.PublicCloneable;/** * A dataset for regular time periods that implements the * {@link TableXYDataset} interface. * * @see org.jfree.data.xy.TableXYDataset * @author andreas.schroeder */public class TimeTableXYDataset extends AbstractIntervalXYDataset implements Cloneable, PublicCloneable, IntervalXYDataset, DomainInfo, TableXYDataset { /** * The data structure to store the values. Each column represents * a series (elsewhere in JFreeChart rows are typically used for series, * but it doesn't matter that much since this data structure is private * and symmetrical anyway), each row contains values for the same * {@link RegularTimePeriod} (the rows are sorted into ascending order). */ private DefaultKeyedValues2D values; /** * A flag that indicates that the domain is 'points in time'. If this flag * is true, only the x-value (and not the x-interval) is used to determine * the range of values in the domain. */ private boolean domainIsPointsInTime; /** * 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 working calendar (to recycle) */ private Calendar workingCalendar; /** * Creates a new dataset. */ public TimeTableXYDataset() { // defer argument checking this(TimeZone.getDefault(), Locale.getDefault()); } /** * Creates a new dataset with the given time zone. * * @param zone the time zone to use (<code>null</code> not permitted). */ public TimeTableXYDataset(TimeZone zone) { // defer argument checking this(zone, Locale.getDefault()); } /** * Creates a new dataset with the given time zone and locale. * * @param zone the time zone to use (<code>null</code> not permitted). * @param locale the locale to use (<code>null</code> not permitted). */ public TimeTableXYDataset(TimeZone zone, Locale locale) { if (zone == null) { throw new IllegalArgumentException("Null 'zone' argument."); } if (locale == null) { throw new IllegalArgumentException("Null 'locale' argument."); } this.values = new DefaultKeyedValues2D(true); this.workingCalendar = Calendar.getInstance(zone, locale); this.xPosition = TimePeriodAnchor.START; } /** * Returns a flag that controls whether the domain is treated as 'points in * time'. * <P> * This flag is used when determining the max and min values for the domain. * If true, then only the x-values are considered for the max and min * values. If false, 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. A {@link DatasetChangeEvent} is sent to all * registered listeners. * * @param flag the new value of 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. * * @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, * then sends a {@link DatasetChangeEvent} 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)); } /** * Adds a new data item to the dataset and sends a * {@link org.jfree.data.general.DatasetChangeEvent} to all registered * listeners. * * @param period the time period. * @param y the value for this period. * @param seriesName the name of the series to add the value. */ public void add(TimePeriod period, double y, String seriesName) { add(period, new Double(y), seriesName, true); } /** * Adds a new data item to the dataset. * * @param period the time period (<code>null</code> not permitted). * @param y the value for this period (<code>null</code> permitted). * @param seriesName the name of the series to add the value * (<code>null</code> not permitted). * @param notify whether dataset listener are notified or not. */ public void add(TimePeriod period, Number y, String seriesName, boolean notify) { this.values.addValue(y, period, seriesName); if (notify) { fireDatasetChanged(); } } /** * Removes an existing data item from the dataset. * * @param period the (existing!) time period of the value to remove * (<code>null</code> not permitted). * @param seriesName the (existing!) series name to remove the value * (<code>null</code> not permitted). */ public void remove(TimePeriod period, String seriesName) { remove(period, seriesName, true); } /** * Removes an existing data item from the dataset. * * @param period the (existing!) time period of the value to remove * (<code>null</code> not permitted). * @param seriesName the (existing!) series name to remove the value * (<code>null</code> not permitted). * @param notify whether dataset listener are notified or not. */ public void remove(TimePeriod period, String seriesName, boolean notify) { this.values.removeValue(period, seriesName); if (notify) { fireDatasetChanged(); } } /** * Returns the time period for the specified item. Bear in mind that all * series share the same set of time periods. * * @param item the item index (0 <= i <= {@link #getItemCount()}). * * @return The time period. */ public TimePeriod getTimePeriod(int item) { return (TimePeriod) this.values.getRowKey(item); } /** * Returns the number of items in ALL series. * * @return The item count. */ public int getItemCount() { return this.values.getRowCount(); } /** * Returns the number of items in a series. This is the same value * that is returned by {@link #getItemCount()} since all series * share the same x-values (time periods).
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?