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

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

?? abstractchartdefinition.java

?? jfreechart標(biāo)簽庫(kù)
?? JAVA
字號(hào):
/* ================================================================
 * Cewolf : Chart enabling Web Objects Framework
 * ================================================================
 *
 * Project Info:  http://cewolf.sourceforge.net
 * Project Lead:  Guido Laures (guido@laures.de);
 *
 * (C) Copyright 2002, by Guido Laures
 *
 * 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.
 */

package de.laures.cewolf.taglib;

import java.awt.Image;
import java.awt.Paint;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.title.LegendTitle;
import org.jfree.ui.RectangleEdge;

import de.laures.cewolf.ChartHolder;
import de.laures.cewolf.ChartPostProcessor;
import de.laures.cewolf.ChartValidationException;
import de.laures.cewolf.DatasetProduceException;
import de.laures.cewolf.PostProcessingException;
import de.laures.cewolf.event.ChartImageRenderListener;
import de.laures.cewolf.util.ImageHelper;
import de.laures.cewolf.util.RenderedImage;

/**
 * Serializable implementaton of a ChartDefinition.
 * @author glaures
 * @see de.laures.cewolf.ChartHolder
 */
public abstract class AbstractChartDefinition implements ChartHolder, Serializable, TaglibConstants, ChartImageRenderListener {
    
    protected static Log log = LogFactory.getLog(AbstractChartDefinition.class);

    protected String title;
	protected String xAxisLabel;
	protected String yAxisLabel;
	protected String type;

    private boolean antialias = true;
    private String background;
    private float backgroundImageAlpha = 1.0f;
    private Paint paint;

    private int legendAnchor = ANCHOR_SOUTH;
    private boolean showLegend = true;

    private transient List postProcessors = new ArrayList();
    private List postProcessorsParams = new ArrayList();

    private transient JFreeChart chart;
	
	protected abstract JFreeChart produceChart() throws DatasetProduceException, ChartValidationException;
	
  
    //gets first legend in the list
    public LegendTitle getLegend()
    {
      //i need to find the legend now.
      LegendTitle legend = null;
      List subTitles = chart.getSubtitles();
      Iterator iter = subTitles.iterator();
      while (iter.hasNext())
      {
        Object o = iter.next();
        if (o instanceof LegendTitle)
        {
          legend = (LegendTitle) o;
          break;
        }
      }
      return legend;
    }
    
    //removes first legend in the list
    public void removeLegend()
    {
      List subTitles = chart.getSubtitles();
      Iterator iter = subTitles.iterator();
      while (iter.hasNext())
      {
        Object o = iter.next();
        if (o instanceof LegendTitle)
        {
          iter.remove();
          break;
        }
      }
    }
  
    /**
     * This method triggers the dataset and chart production. It is only
     * from outside if there is no cached image available in the the
     * image cache.
     */
    public Object getChart() throws DatasetProduceException, ChartValidationException, PostProcessingException {
        if (chart == null) {
            chart = produceChart();
            chart.setAntiAlias(antialias);
            if (background != null) {
                Image image = ImageHelper.loadImage(background);
                chart.setBackgroundImage(image);
                chart.setBackgroundImageAlpha(backgroundImageAlpha);
            }
            if (paint != null) {
                chart.setBackgroundPaint(paint);
            }
            if (showLegend) 
            {

                LegendTitle legend = this.getLegend();
                switch (legendAnchor) 
                {
                    case ANCHOR_NORTH :
                        legend.setPosition(RectangleEdge.TOP);
                        break;
                    case ANCHOR_WEST :
                      legend.setPosition(RectangleEdge.RIGHT);
                        break;
                    case ANCHOR_EAST :
                      legend.setPosition(RectangleEdge.LEFT);
                        break;
                    default :
                      legend.setPosition(RectangleEdge.BOTTOM);
                }
            } 
            else 
            {
              this.removeLegend();
            }
            // postProcessing
            for (int i = 0; i < postProcessors.size(); i++) {
                ChartPostProcessor pp = (ChartPostProcessor)postProcessors.get(i);
                try {
                    pp.processChart(chart, (Map)postProcessorsParams.get(i));
                } catch (Throwable t) {
                	log.error(t);
                    throw new PostProcessingException(t.getClass().getName() + " raised by post processor '" +
                    		pp + "'.\nPost processing of this post processor " + "has been ignored.");
                }
            }
        }
        return chart;
    }

    /**
     * Sets the antialias.
     * @param antialias The antialias to set
     */
    public void setAntialias(boolean antialias) {
        this.antialias = antialias;
    }

    /**
     * Sets the background.
     * @param background The background to set
     */
    public void setBackground(String background) {
        this.background = background;
    }

    /**
     * Sets the backgroundImageAlpha.
     * @param backgroundImageAlpha The backgroundImageAlpha to set
     */
    public void setBackgroundImageAlpha(float backgroundImageAlpha) {
        this.backgroundImageAlpha = backgroundImageAlpha;
    }

    /**
     * Sets the legendAnchor.
     * @param legendAnchor The legendAnchor to set
     */
    public void setLegendAnchor(int legendAnchor) {
        this.legendAnchor = legendAnchor;
    }

    /**
     * Sets the paint.
     * @param paint The paint to set
     */
    public void setPaint(Paint paint) {
        this.paint = paint;
    }

    /**
     * Sets the showLegend.
     * @param showLegend The showLegend to set
     */
    public void setShowLegend(boolean showLegend) {
        this.showLegend = showLegend;
    }

    /**
     * Sets the title.
     * @param title The title to set
     */
    public void setTitle(String title) {
        this.title = title;
    }

    /**
     * Sets the type.
     * @param type The type to set
     */
    public void setType(String type) {
        this.type = type;
    }

    /**
     * Sets the xAxisLabel.
     * @param xAxisLabel The xAxisLabel to set
     */
    public void setXAxisLabel(String xAxisLabel) {
        this.xAxisLabel = xAxisLabel;
    }

    /**
     * Sets the yAxisLabel.
     * @param yAxisLabel The yAxisLabel to set
     */
    public void setYAxisLabel(String yAxisLabel) {
        this.yAxisLabel = yAxisLabel;
    }

    public void addPostProcessor(ChartPostProcessor pp) {
        postProcessors.add(pp);
    }

    public void addPostProcessorParams(Map params) {
        postProcessorsParams.add(params);
    }
    
	/**
	 * Callback right after a new image gets rendered.
	 * Implemented, so if postprocessors implement the ImageRenderListener interface
	 * then they will be called back also
	 * 
	 * @param renderedImage The fresh image just got rendered
	 */
	public void onImageRendered (RenderedImage renderedImage) {
		// if the postprocessor implements ImageRenderListener interface call it!
        for (int i = 0; i < postProcessors.size(); i++) {
            ChartPostProcessor pp = (ChartPostProcessor)postProcessors.get(i);
            if (pp instanceof ChartImageRenderListener) {
            	((ChartImageRenderListener) pp).onImageRendered(renderedImage);
            }
        }		
	}

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品成人在线观看| 91黄色激情网站| k8久久久一区二区三区 | 日韩免费观看高清完整版| 日韩精品专区在线| 国产精品欧美一级免费| 亚洲一区在线观看免费 | 2023国产精品自拍| 成人免费在线视频观看| 五月天激情综合| 福利91精品一区二区三区| 在线观看亚洲专区| 久久久久久日产精品| 一区二区三区中文免费| 国产一区在线不卡| 日韩欧美一级片| 中文字幕一区不卡| 另类的小说在线视频另类成人小视频在线| 国产在线看一区| 在线观看日韩电影| 欧美激情综合五月色丁香小说| 亚洲一级片在线观看| 极品瑜伽女神91| 欧美午夜在线一二页| 国产日韩精品一区二区三区| 五月婷婷另类国产| 99久久精品国产一区二区三区| 日韩一卡二卡三卡四卡| 亚洲欧美日韩久久| 国产精一品亚洲二区在线视频| 欧美色图在线观看| 国产精品电影院| 国内精品伊人久久久久av影院 | 亚洲国产日韩在线一区模特| 国产精品99久久久久久久vr| 欧美一卡2卡3卡4卡| 亚洲视频一区在线| 国产成人免费在线| 日韩免费观看2025年上映的电影| 亚洲综合成人网| 99久久99久久精品免费看蜜桃 | 国产精品123区| 欧美精品九九99久久| 亚洲三级在线免费观看| 国产成人精品免费视频网站| 欧美成人激情免费网| 日精品一区二区| 色哟哟亚洲精品| 国产精品九色蝌蚪自拍| 国产精品1024久久| 久久久高清一区二区三区| 国产成人av影院| 日韩精品高清不卡| 欧美性受xxxx黑人xyx性爽| 国产精品久久久久久户外露出| 国产一区在线观看麻豆| 精品第一国产综合精品aⅴ| 日韩精品福利网| 91精品久久久久久蜜臀| 午夜精品福利久久久| 欧美在线视频全部完| 亚洲黄色小视频| 91久久精品一区二区| ...xxx性欧美| 99精品国产91久久久久久| 国产精品久久久久久久午夜片 | 精品国产sm最大网站免费看| 免费成人性网站| 在线成人av网站| 日韩成人免费电影| 69久久99精品久久久久婷婷| 丝袜亚洲另类丝袜在线| 91精品国产91热久久久做人人| 亚洲bdsm女犯bdsm网站| 欧美日韩www| 日本中文字幕一区二区视频| 91精品一区二区三区久久久久久| 偷拍日韩校园综合在线| 91精品免费在线观看| 久久99精品久久久久久| 2024国产精品视频| 成人精品国产免费网站| 国产精品国产三级国产aⅴ原创| 成人av电影在线| 亚洲黄色尤物视频| 欧美日韩黄色一区二区| 日韩电影在线一区二区三区| 精品国产一区二区精华 | 国产精品久久久久久久蜜臀 | 亚洲综合在线电影| 欧美日韩国产首页| 日韩av一级电影| 久久综合网色—综合色88| 国产乱码精品一区二区三区五月婷| 久久久欧美精品sm网站| 99久久99久久综合| 亚洲第一搞黄网站| 精品国产凹凸成av人网站| 国产成人精品免费视频网站| 亚洲女人****多毛耸耸8| 欧美日韩国产三级| 激情久久五月天| 自拍偷拍欧美精品| 欧美日韩国产综合草草| 国产酒店精品激情| 亚洲精品videosex极品| 欧美一级国产精品| 成人一区在线看| 亚洲国产精品久久艾草纯爱| 欧美成人a视频| jvid福利写真一区二区三区| 天天操天天干天天综合网| 久久青草国产手机看片福利盒子| 91麻豆文化传媒在线观看| 视频一区二区中文字幕| 国产亚洲欧美中文| 欧美无人高清视频在线观看| 国产一区二区三区四区在线观看| 亚洲天堂久久久久久久| 日韩一级大片在线观看| av在线不卡电影| 日本不卡1234视频| 亚洲欧美怡红院| 日韩免费视频线观看| 一本久久精品一区二区| 精品制服美女丁香| 亚洲精品一卡二卡| 久久久亚洲国产美女国产盗摄| 欧洲激情一区二区| 国产精品 欧美精品| 三级久久三级久久| 亚洲图片欧美激情| 精品av综合导航| 欧美在线影院一区二区| 春色校园综合激情亚洲| 日本vs亚洲vs韩国一区三区| 亚洲色图都市小说| 国产人成一区二区三区影院| 欧美精品三级日韩久久| caoporn国产一区二区| 久久99精品一区二区三区| 一区二区久久久久久| 国产精品久久久久四虎| 亚洲精品一线二线三线| 91精品国产入口| 91丨九色丨国产丨porny| 国产美女主播视频一区| 毛片av一区二区| 亚洲国产三级在线| 亚洲精品乱码久久久久久 | av动漫一区二区| 加勒比av一区二区| 日韩高清在线一区| 一区二区三区高清| 成人欧美一区二区三区| 国产免费观看久久| 精品成人佐山爱一区二区| 91精品国产一区二区三区蜜臀 | 午夜天堂影视香蕉久久| 亚洲啪啪综合av一区二区三区| 国产欧美日产一区| 久久久久久久久久久久久久久99| 欧美一区三区四区| 欧美精品视频www在线观看| 欧美性色黄大片| 色屁屁一区二区| 91网站在线播放| 91色porny蝌蚪| 99精品视频在线免费观看| 成人午夜私人影院| 福利一区在线观看| 国产九九视频一区二区三区| 国产一区二区三区综合| 国产米奇在线777精品观看| 国产资源精品在线观看| 精品一区二区三区视频在线观看 | 欧美mv日韩mv亚洲| 精品奇米国产一区二区三区| 日韩欧美的一区二区| 日韩欧美国产不卡| 精品88久久久久88久久久| 欧美电视剧免费观看| 欧美va亚洲va在线观看蝴蝶网| 日韩欧美中文字幕公布| 日韩精品一区二区在线| 精品国产精品网麻豆系列| 久久综合色天天久久综合图片| 久久久精品天堂| 日本一二三不卡| 国产精品久久久久婷婷| 亚洲欧美日韩一区| 一区二区三区精品在线| 亚洲国产精品自拍| 日韩激情一二三区| 免费一区二区视频| 国产寡妇亲子伦一区二区| 99这里只有久久精品视频| 色狠狠一区二区| 正在播放一区二区| xfplay精品久久|