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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? stackedarearenderer.java

?? jfreechart1.0.1 jsp繪制圖表的開發(fā)包
?? 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.]
 *
 * ------------------------
 * StackedAreaRenderer.java
 * ------------------------
 * (C) Copyright 2002-2005, by Dan Rivett (d.rivett@ukonline.co.uk) and 
 *                          Contributors.
 *
 * Original Author:  Dan Rivett (adapted from AreaCategoryItemRenderer);
 * Contributor(s):   Jon Iles;
 *                   David Gilbert (for Object Refinery Limited);
 *                   Christian W. Zuckschwerdt;
 *
 * $Id: StackedAreaRenderer.java,v 1.6.2.2 2005/10/25 20:54:16 mungady Exp $
 *
 * Changes:
 * --------
 * 20-Sep-2002 : Version 1, contributed by Dan Rivett;
 * 24-Oct-2002 : Amendments for changes in CategoryDataset interface and 
 *               CategoryToolTipGenerator interface (DG);
 * 01-Nov-2002 : Added tooltips (DG);
 * 06-Nov-2002 : Renamed drawCategoryItem() --> drawItem() and now using axis 
 *               for category spacing. Renamed StackedAreaCategoryItemRenderer 
 *               --> StackedAreaRenderer (DG);
 * 26-Nov-2002 : Switched CategoryDataset --> TableDataset (DG);
 * 26-Nov-2002 : Replaced isStacked() method with getRangeType() method (DG);
 * 17-Jan-2003 : Moved plot classes to a separate package (DG);
 * 25-Mar-2003 : Implemented Serializable (DG);
 * 13-May-2003 : Modified to take into account the plot orientation (DG);
 * 30-Jul-2003 : Modified entity constructor (CZ);
 * 07-Oct-2003 : Added renderer state (DG);
 * 29-Apr-2004 : Added getRangeExtent() override (DG);
 * 05-Nov-2004 : Modified drawItem() signature (DG);
 * 07-Jan-2005 : Renamed getRangeExtent() --> findRangeBounds() (DG);
 * 
 */

package org.jfree.chart.renderer.category;

import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;
import java.io.Serializable;

import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.EntityCollection;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.Range;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.ui.RectangleEdge;
import org.jfree.util.PublicCloneable;

/**
 * A renderer that draws stacked area charts for a 
 * {@link org.jfree.chart.plot.CategoryPlot}.
 *
 * @author Dan Rivett
 */
public class StackedAreaRenderer extends AreaRenderer 
                                 implements Cloneable, PublicCloneable, 
                                            Serializable {

    /** For serialization. */
    private static final long serialVersionUID = -3595635038460823663L;
     
    /**
     * Creates a new renderer.
     */
    public StackedAreaRenderer() {
        super();
    }

    /**
     * Returns the range of values the renderer requires to display all the 
     * items from the specified dataset.
     * 
     * @param dataset  the dataset (<code>null</code> not permitted).
     * 
     * @return The range (or <code>null</code> if the dataset is empty).
     */
    public Range findRangeBounds(CategoryDataset dataset) {
        return DatasetUtilities.findStackedRangeBounds(dataset);   
    }

    /**
     * Draw a single data item.
     *
     * @param g2  the graphics device.
     * @param state  the renderer state.
     * @param dataArea  the data plot area.
     * @param plot  the plot.
     * @param domainAxis  the domain axis.
     * @param rangeAxis  the range axis.
     * @param dataset  the data.
     * @param row  the row index (zero-based).
     * @param column  the column index (zero-based).
     * @param pass  the pass index.
     */
    public void drawItem(Graphics2D g2,
                         CategoryItemRendererState state,
                         Rectangle2D dataArea,
                         CategoryPlot plot,
                         CategoryAxis domainAxis,
                         ValueAxis rangeAxis,
                         CategoryDataset dataset,
                         int row,
                         int column,
                         int pass) {

        // plot non-null values...
        Number value = dataset.getValue(row, column);
        if (value == null) {
            return;
        }

        // leave the y values (y1, y0) untranslated as it is going to be be 
        // stacked up later by previous series values, after this it will be 
        // translated.
        double x1 = domainAxis.getCategoryMiddle(
            column, getColumnCount(), dataArea, plot.getDomainAxisEdge()
        );
        double y1 = 0.0;  // calculate later
        double y1Untranslated = value.doubleValue();

        g2.setPaint(getItemPaint(row, column));
        g2.setStroke(getItemStroke(row, column));

        if (column != 0) {

            Number previousValue = dataset.getValue(row, column - 1);
            if (previousValue != null) {

                double x0 = domainAxis.getCategoryMiddle(
                    column - 1, getColumnCount(), dataArea, 
                    plot.getDomainAxisEdge()
                );
                double y0Untranslated = previousValue.doubleValue();

                // Get the previous height, but this will be different for both
                // y0 and y1 as the previous series values could differ.
                double previousHeightx0Untranslated 
                    = getPreviousHeight(dataset, row, column - 1);
                double previousHeightx1Untranslated 
                    = getPreviousHeight(dataset, row, column);

                // Now stack the current y values on top of the previous values.
                y0Untranslated += previousHeightx0Untranslated;
                y1Untranslated += previousHeightx1Untranslated;

                // Now translate the previous heights
                RectangleEdge location = plot.getRangeAxisEdge();
                double previousHeightx0 = rangeAxis.valueToJava2D(
                    previousHeightx0Untranslated, dataArea, location
                );
                double previousHeightx1 = rangeAxis.valueToJava2D(
                    previousHeightx1Untranslated, dataArea, location
                );

                // Now translate the current y values.
                double y0 = rangeAxis.valueToJava2D(
                    y0Untranslated, dataArea, location
                );
                y1 = rangeAxis.valueToJava2D(
                    y1Untranslated, dataArea, location
                );

                Polygon p = null;
                PlotOrientation orientation = plot.getOrientation();
                if (orientation == PlotOrientation.HORIZONTAL) {
                    p = new Polygon();
                    p.addPoint((int) y0, (int) x0);
                    p.addPoint((int) y1, (int) x1);
                    p.addPoint((int) previousHeightx1, (int) x1);
                    p.addPoint((int) previousHeightx0, (int) x0);
                }
                else if (orientation == PlotOrientation.VERTICAL) {
                    p = new Polygon();
                    p.addPoint((int) x0, (int) y0);
                    p.addPoint((int) x1, (int) y1);
                    p.addPoint((int) x1, (int) previousHeightx1);
                    p.addPoint((int) x0, (int) previousHeightx0);
                }
                g2.setPaint(getItemPaint(row, column));
                g2.setStroke(getItemStroke(row, column));
                g2.fill(p);
            }

        }

        // add an item entity, if this information is being collected
        EntityCollection entities = state.getEntityCollection();
        if (entities != null) {
            Shape shape = new Rectangle2D.Double(x1 - 3.0, y1 - 3.0, 6.0, 6.0);
            addItemEntity(entities, dataset, row, column, shape);
        }

    }

    /**
     * Calculates the stacked value of the all series up to, but not including 
     * <code>series</code> for the specified category, <code>category</code>.  
     * It returns 0.0 if <code>series</code> is the first series, i.e. 0.
     *
     * @param data  the data.
     * @param series  the series.
     * @param category  the category.
     *
     * @return double returns a cumulative value for all series' values up to 
     *         but excluding <code>series</code> for Object 
     *         <code>category</code>.
     */
    protected double getPreviousHeight(CategoryDataset data, 
                                       int series, int category) {

        double result = 0.0;
        Number tmp;
        for (int i = 0; i < series; i++) {
            tmp = data.getValue(i, category);
            if (tmp != null) {
                result += tmp.doubleValue();
            }
        }
        return result;

    }

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久超碰97中文字幕| 蜜桃视频免费观看一区| 色爱区综合激月婷婷| 麻豆国产精品777777在线| 国产精品久久夜| 日韩一区二区视频| 色偷偷久久一区二区三区| 国产一区二区电影| 亚洲福利电影网| 亚洲色图在线播放| 久久先锋影音av鲁色资源网| 欧美在线三级电影| 成人av电影在线网| 精品一区免费av| 日产欧产美韩系列久久99| 国产盗摄女厕一区二区三区| 日韩极品在线观看| 精品国产乱码久久| 欧美日韩国产免费| 国产精品一区久久久久| 日韩美女天天操| 丰满岳乱妇一区二区三区| 久久久不卡影院| 成人av免费在线播放| 一区二区三区精密机械公司| 欧美三级电影精品| 久久精品国产第一区二区三区| 91蝌蚪porny九色| 日韩欧美国产综合| 精品一区二区综合| 国产日韩欧美在线一区| 国产精品一区2区| 国产精品久久毛片a| 高清国产一区二区| 国产亚洲女人久久久久毛片| 五月婷婷综合网| 久久看人人爽人人| 91久久精品午夜一区二区| 日韩激情视频网站| 国产精品网友自拍| 欧美日韩国产一级二级| 激情综合网av| 舔着乳尖日韩一区| 亚洲色图欧美激情| 欧美一级夜夜爽| 99久久精品费精品国产一区二区| 性久久久久久久久| 国产精品久久午夜| 欧美一区二区三区在线| 欧美在线一二三| 国产成人免费高清| 视频一区中文字幕| 亚洲男同性恋视频| 国产精品久久久久久久久快鸭| 91极品视觉盛宴| 成人黄色在线网站| 日本不卡高清视频| 国产欧美日韩另类一区| 日韩欧美一区二区免费| 日本黄色一区二区| 成人久久久精品乱码一区二区三区| 亚洲妇熟xx妇色黄| 亚洲免费伊人电影| 亚洲图片你懂的| 亚洲激情男女视频| 亚洲综合视频网| 欧美va亚洲va在线观看蝴蝶网| 欧美一级精品在线| 欧美精品日韩一区| 欧美一区二区三区系列电影| 91精品婷婷国产综合久久竹菊| 在线视频一区二区三区| 97精品视频在线观看自产线路二| 成人aa视频在线观看| 国产福利视频一区二区三区| 国产成人啪午夜精品网站男同| 韩国成人在线视频| 成人黄色小视频| 色综合婷婷久久| 欧美日韩综合在线免费观看| 欧美日韩国产影片| 欧美不卡一区二区| 国产精品女上位| 亚洲成人一区在线| 国产一区三区三区| 99re这里只有精品首页| 欧美人妖巨大在线| 久久色成人在线| 亚洲欧美日韩国产中文在线| 亚洲一区二区三区在线看| 国产成人亚洲综合a∨猫咪| 99久久99久久久精品齐齐| 7799精品视频| 中文字幕中文字幕一区| 午夜欧美在线一二页| 国产福利一区在线| 欧美又粗又大又爽| 久久综合999| 亚洲综合免费观看高清完整版 | 精品国产91亚洲一区二区三区婷婷| 日韩精品一区二区三区中文精品| 日韩欧美亚洲国产另类| 日本一区二区成人| 久久精品国内一区二区三区| 欧美性生交片4| 久久久久久久久97黄色工厂| 五月天激情综合网| 欧美亚男人的天堂| 亚洲日本一区二区三区| 99久久久免费精品国产一区二区| 欧美网站大全在线观看| 石原莉奈在线亚洲二区| 色又黄又爽网站www久久| 国产精品女上位| 国产成人av电影在线| 精品久久久久一区二区国产| 美女高潮久久久| 精品成人在线观看| 国产一区二区主播在线| 欧美一级片在线观看| 日本伊人色综合网| 亚洲精品在线一区二区| 成人激情免费网站| 亚洲欧美日韩在线| 欧美日韩国产电影| 美女网站色91| 精品成人私密视频| 97久久精品人人澡人人爽| 一区二区三区四区五区视频在线观看 | 国产精品三级久久久久三级| 国产激情视频一区二区在线观看| 欧美成人video| 不卡的电影网站| 亚洲综合久久av| 91精品国产综合久久国产大片| 乱一区二区av| 亚洲欧美综合网| 粉嫩aⅴ一区二区三区四区| 亚洲最新视频在线观看| 久久精品日韩一区二区三区| 91精品国产aⅴ一区二区| 色综合视频一区二区三区高清| 麻豆精品精品国产自在97香蕉| 一区二区成人在线| 久久精品亚洲乱码伦伦中文| 91精品国产综合久久精品app| 从欧美一区二区三区| 激情小说亚洲一区| 日本人妖一区二区| 午夜欧美电影在线观看| 一区二区三区四区不卡视频| 日韩欧美一区二区免费| 欧美一区二区在线看| 欧美一区二区三区电影| 日韩精品一区二区三区中文精品 | 久久这里只有精品视频网| 欧美日精品一区视频| 欧美日免费三级在线| 欧美日韩mp4| 337p亚洲精品色噜噜噜| 91亚洲永久精品| 色综合久久久久综合99| 一本色道a无线码一区v| 色菇凉天天综合网| 欧美日韩中文字幕精品| 欧美日韩国产在线播放网站| 欧美一区二区三区啪啪| av福利精品导航| 91免费版在线| 6080日韩午夜伦伦午夜伦| 日韩精品一区二区在线观看| 欧美激情在线一区二区| 欧美一区国产二区| 精品视频1区2区3区| 成人国产精品视频| 成人免费av网站| 欧美私人免费视频| 精品久久久网站| 亚洲日本在线天堂| 欧美日本一区二区| 666欧美在线视频| 一区二区在线观看视频在线观看| 天堂蜜桃一区二区三区| 91碰在线视频| 中文字幕亚洲精品在线观看| 强制捆绑调教一区二区| 欧美高清一级片在线| 日韩二区在线观看| 欧美日韩国产123区| 五月天亚洲婷婷| 精品久久久三级丝袜| 日产国产高清一区二区三区| 韩国中文字幕2020精品| 91亚洲精品一区二区乱码| 欧美色视频一区| 久久精品在线观看| 国产成人午夜高潮毛片| 99这里都是精品| 日韩一级高清毛片| 美脚の诱脚舐め脚责91|