亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? series.java

?? 關于jfreechart的電子說明書,一種說明圖型使用的介紹
?? JAVA
字號:
/* ===========================================================
 * 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
 * USA.  
 *
 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
 * in the United States and other countries.]
 *
 * -----------
 * Series.java
 * -----------
 * (C) Copyright 2001-2005, by Object Refinery Limited.
 *
 * Original Author:  David Gilbert (for Object Refinery Limited);
 * Contributor(s):   -;
 *
 * $Id: Series.java,v 1.9.2.1 2005/10/25 21:32:29 mungady Exp $
 *
 * Changes
 * -------
 * 15-Nov-2001 : Version 1 (DG);
 * 29-Nov-2001 : Added cloning and property change support (DG);
 * 30-Jan-2002 : Added a description attribute and changed the constructors to 
 *               protected (DG);
 * 07-Oct-2002 : Fixed errors reported by Checkstyle (DG);
 * 13-Mar-2003 : Implemented Serializable (DG);
 * 01-May-2003 : Added equals() method (DG);
 * 26-Jun-2003 : Changed listener list to use EventListenerList - see bug 
 *               757027 (DG);
 * 15-Oct-2003 : Added a flag to control whether or not change events are sent 
 *               to registered listeners (DG);
 * 19-May-2005 : Made abstract (DG);
 *
 */

package org.jfree.data.general;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;

import javax.swing.event.EventListenerList;

import org.jfree.util.ObjectUtilities;

/**
 * Base class representing a data series.  Subclasses are left to implement the
 * actual data structures.
 * <P>
 * The series has two properties ("Name" and "Description") for which you can
 * register a {@link PropertyChangeListener}.
 * <P>
 * You can also register a {@link SeriesChangeListener} to receive notification 
 * of changes to the series data.
 */
public abstract class Series implements Cloneable, Serializable {

    /** For serialization. */
    private static final long serialVersionUID = -6906561437538683581L;
    
    /** The key for the series. */
    private Comparable key;

    /** A description of the series. */
    private String description;

    /** Storage for registered change listeners. */
    private EventListenerList listeners;

    /** Object to support property change notification. */
    private PropertyChangeSupport propertyChangeSupport;

    /** A flag that controls whether or not changes are notified. */
    private boolean notify;

    /**
     * Creates a new series.
     *
     * @param key  the series key (<code>null</code> not permitted).
     */
    protected Series(Comparable key) {
        this(key, null);
    }

    /**
     * Constructs a series.
     *
     * @param key  the series key (<code>null</code> NOT permitted).
     * @param description  the series description (<code>null</code> permitted).
     */
    protected Series(Comparable key, String description) {
        if (key == null) {
            throw new IllegalArgumentException("Null 'key' argument.");
        }
        this.key = key;
        this.description = description;
        this.listeners = new EventListenerList();
        this.propertyChangeSupport = new PropertyChangeSupport(this);
        this.notify = true;
        
    }

    /**
     * Returns the key for the series.
     *
     * @return The series key (never <code>null</code>).
     */
    public Comparable getKey() {
        return this.key;
    }

    /**
     * Sets the key for the series.
     *
     * @param key  the key (<code>null</code> not permitted).
     */
    public void setKey(Comparable key) {
        if (key == null) {
            throw new IllegalArgumentException("Null 'key' argument.");
        }
        Comparable old = this.key;
        this.key = key;
        this.propertyChangeSupport.firePropertyChange("Key", old, key);
    }

    /**
     * Returns a description of the series.
     *
     * @return The series description (possibly <code>null</code>).
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Sets the description of the series.
     *
     * @param description  the description (<code>null</code> permitted).
     */
    public void setDescription(String description) {
        String old = this.description;
        this.description = description;
        this.propertyChangeSupport.firePropertyChange(
            "Description", old, description
        );
    }

    /**
     * Returns the flag that controls whether or not change events are sent to 
     * registered listeners.
     * 
     * @return A boolean.
     */
    public boolean getNotify() {
        return this.notify;
    }
    
    /**
     * Sets the flag that controls whether or not change events are sent to 
     * registered listeners.
     * 
     * @param notify  the new value of the flag.
     */
    public void setNotify(boolean notify) {
        if (this.notify != notify) {
            this.notify = notify;
            fireSeriesChanged();
        }
    }
    
    /**
     * Returns a clone of the series.
     * <P>
     * Notes:
     * <ul>
     * <li>No need to clone the name or description, since String object is 
     * immutable.</li>
     * <li>We set the listener list to empty, since the listeners did not 
     * register with the clone.</li>
     * <li>Same applies to the PropertyChangeSupport instance.</li>
     * </ul>
     *
     * @return A clone of the series.
     * 
     * @throws CloneNotSupportedException  not thrown by this class, but 
     *         subclasses may differ.
     */
    public Object clone() throws CloneNotSupportedException {

        Series clone = (Series) super.clone();
        clone.listeners = new EventListenerList();
        clone.propertyChangeSupport = new PropertyChangeSupport(clone);
        return clone;

    }

    /**
     * Tests the series for equality with another object.
     *
     * @param obj  the object.
     *
     * @return <code>true</code> or <code>false</code>.
     */
    public boolean equals(Object obj) {

        if (obj == this) {
            return true;
        }

        if (!(obj instanceof Series)) {
            return false;
        }
        Series that = (Series) obj;
        if (!getKey().equals(that.getKey())) {
            return false;
        }

        if (!ObjectUtilities.equal(getDescription(), that.getDescription())) {
            return false;
        }

        return true;
    }

    /**
     * Returns a hash code.
     * 
     * @return A hash code.
     */
    public int hashCode() {
        int result;
        result = this.key.hashCode();
        result = 29 * result + (this.description != null 
                ? this.description.hashCode() : 0);
        return result;
    }

    /**
     * Registers an object with this series, to receive notification whenever 
     * the series changes.
     * <P>
     * Objects being registered must implement the {@link SeriesChangeListener} 
     * interface.
     *
     * @param listener  the listener to register.
     */
    public void addChangeListener(SeriesChangeListener listener) {
        this.listeners.add(SeriesChangeListener.class, listener);
    }

    /**
     * Deregisters an object, so that it not longer receives notification 
     * whenever the series changes.
     *
     * @param listener  the listener to deregister.
     */
    public void removeChangeListener(SeriesChangeListener listener) {
        this.listeners.remove(SeriesChangeListener.class, listener);
    }

    /**
     * General method for signalling to registered listeners that the series
     * has been changed.
     */
    public void fireSeriesChanged() {
        if (this.notify) {
            notifyListeners(new SeriesChangeEvent(this));
        }
    }

    /**
     * Sends a change event to all registered listeners.
     *
     * @param event  contains information about the event that triggered the 
     *               notification.
     */
    protected void notifyListeners(SeriesChangeEvent event) {

        Object[] listenerList = this.listeners.getListenerList();
        for (int i = listenerList.length - 2; i >= 0; i -= 2) {
            if (listenerList[i] == SeriesChangeListener.class) {
                ((SeriesChangeListener) listenerList[i + 1]).seriesChanged(
                    event
                );
            }
        }

    }

    /**
     * Adds a property change listener to the series.
     *
     * @param listener  the listener.
     */
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        this.propertyChangeSupport.addPropertyChangeListener(listener);
    }

    /**
     * Removes a property change listener from the series.
     *
     * @param listener The listener.
     */
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        this.propertyChangeSupport.removePropertyChangeListener(listener);
    }

    /**
     * Fires a property change event.
     *
     * @param property  the property key.
     * @param oldValue  the old value.
     * @param newValue  the new value.
     */
    protected void firePropertyChange(String property, 
                                      Object oldValue, 
                                      Object newValue) {
        this.propertyChangeSupport.firePropertyChange(
            property, oldValue, newValue
        );
    }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精油按摩中文字幕久久| 国产aⅴ综合色| 欧美一区二区在线看| 美女网站视频久久| 国产精品电影一区二区| 日韩欧美国产一二三区| 色www精品视频在线观看| 日韩av电影免费观看高清完整版 | 欧美精品日韩综合在线| 国产夫妻精品视频| 国产一区二区三区免费看| 日韩av午夜在线观看| 午夜在线电影亚洲一区| 亚洲欧美日韩电影| 亚洲观看高清完整版在线观看 | 国产成人亚洲综合色影视| 99综合影院在线| 1024成人网色www| 中文字幕在线一区| 日韩一级免费一区| 欧美一级在线观看| 国产色婷婷亚洲99精品小说| 精品国产一区二区精华| 亚洲国产高清aⅴ视频| 欧美一级二级在线观看| 久久精品综合网| 中文字幕在线不卡| 日韩av电影免费观看高清完整版| 三级久久三级久久久| 蓝色福利精品导航| 在线亚洲高清视频| 国产亚洲精久久久久久| 一区二区三区中文在线观看| 日日夜夜免费精品视频| 成人性生交大片免费看视频在线 | 日韩国产精品久久久久久亚洲| 亚洲一区免费在线观看| 亚洲国产视频直播| 国产原创一区二区三区| 在线观看免费亚洲| 国产亚洲精久久久久久| 日韩精品乱码免费| 欧美三级在线视频| 亚洲人成精品久久久久久| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久影院午夜片一区| 亚洲特黄一级片| 国产99久久久国产精品潘金网站| 欧美系列日韩一区| 亚洲一本大道在线| av一区二区三区四区| 国产蜜臀97一区二区三区| 激情久久久久久久久久久久久久久久| 91国偷自产一区二区三区成为亚洲经典| 欧美三级视频在线观看| 亚洲最大的成人av| 色www精品视频在线观看| 一区二区三区在线免费播放| 成人黄色软件下载| ...xxx性欧美| 欧美日韩亚洲综合在线| 亚洲成a人v欧美综合天堂下载 | 精品区一区二区| 国产一级精品在线| 亚洲色图制服诱惑| 欧美在线不卡视频| 亚洲啪啪综合av一区二区三区| 91免费看`日韩一区二区| 亚洲综合免费观看高清完整版| 在线视频国产一区| 久久精品国产99| 日韩视频免费观看高清完整版| 国产乱国产乱300精品| 久久久国产精华| 欧美日韩午夜精品| 国产v日产∨综合v精品视频| 一区二区高清免费观看影视大全| 91麻豆精品国产91| 成人成人成人在线视频| 捆绑变态av一区二区三区| 国产精品久久久久aaaa| 欧美精品精品一区| 91国在线观看| 国产综合久久久久久鬼色| 亚洲一二三四在线| 国产精品美女久久久久久久| 日韩免费成人网| 成人激情动漫在线观看| 亚洲国产精品久久不卡毛片| 久久久蜜桃精品| 欧美一区二区三区在线看| 在线这里只有精品| 波多野结衣亚洲一区| 国产成人精品网址| 免费看日韩精品| 亚洲国产精品视频| 亚洲日本va在线观看| 国产精品久久久久久户外露出| 2020日本不卡一区二区视频| 欧美肥大bbwbbw高潮| 在线观看视频欧美| 国产成人小视频| 99久久久无码国产精品| 不卡av免费在线观看| 91亚洲国产成人精品一区二区三| 成人性生交大片免费看中文| jiyouzz国产精品久久| 国产精品综合久久| 丰满亚洲少妇av| 91欧美一区二区| 欧美在线免费视屏| 精品免费日韩av| 国产精品久线观看视频| 一区二区三区四区高清精品免费观看 | 日本一区二区在线不卡| 国产精品看片你懂得| 一区二区三区不卡视频 | 天天操天天色综合| 国产一区二区不卡老阿姨| 国产suv精品一区二区6| 一本大道久久a久久精品综合| 日韩女优av电影| 国产亚洲一区二区三区在线观看| 97aⅴ精品视频一二三区| 亚洲国产成人91porn| 免费成人在线网站| 色一情一乱一乱一91av| 久久综合五月天婷婷伊人| 国产精品网站在线观看| 日韩综合一区二区| 国产成人免费视频网站高清观看视频 | 国产亚洲成aⅴ人片在线观看| 日韩精品一二三| 91精品久久久久久久99蜜桃| 亚洲最新在线观看| 精品视频一区三区九区| 亚洲国产综合人成综合网站| 91久久精品一区二区三区| 亚洲欧美电影一区二区| 日本高清不卡aⅴ免费网站| 成人欧美一区二区三区| 欧洲一区在线电影| 亚洲成人精品在线观看| 91精品久久久久久久91蜜桃| 日韩av电影天堂| 国产亚洲成av人在线观看导航| 国产999精品久久久久久| 1000精品久久久久久久久| 91久久久免费一区二区| 久久99精品网久久| 国产精品国产馆在线真实露脸| 99麻豆久久久国产精品免费| 亚洲一区视频在线| 精品久久久久久最新网址| 懂色av一区二区三区免费观看| 亚洲日穴在线视频| 久久久精品tv| 欧美日韩不卡一区二区| 国产成人亚洲综合a∨猫咪| 亚洲一区二区偷拍精品| 久久久久久久av麻豆果冻| 在线精品视频小说1| 国产成人av电影免费在线观看| 亚洲欧美一区二区三区极速播放| 欧美一二三四区在线| 色综合久久久久| 丁香婷婷综合色啪| 久久爱www久久做| 老鸭窝一区二区久久精品| 一区二区三区在线观看动漫| 久久久91精品国产一区二区三区| 欧美视频第二页| 91网页版在线| 91小视频在线免费看| 国产精品77777竹菊影视小说| 亚洲一区二区三区美女| 国产精品国产三级国产专播品爱网| 精品国产乱码久久久久久牛牛| 欧美美女喷水视频| 精品视频1区2区| 欧美视频一区在线| 555夜色666亚洲国产免| 9191久久久久久久久久久| 欧美精品一级二级| 欧美一卡2卡三卡4卡5免费| 欧美一级日韩免费不卡| 欧美大白屁股肥臀xxxxxx| 精品美女一区二区| 中文字幕国产一区| 亚洲一级片在线观看| 精品一区二区精品| 成人性生交大片免费看在线播放| 99精品视频一区二区三区| 91极品美女在线| 2021国产精品久久精品| 亚洲欧洲一区二区在线播放| 亚洲成在人线免费| 韩国成人在线视频| 91啪在线观看| 久久人人爽爽爽人久久久|