package org.quickbundle.third.jfreechart; /* * Created on 2003-9-9 * http://www.sentom.net * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ import java.awt.Color; import java.awt.Font; import java.io.PrintWriter; import java.text.DecimalFormat; import java.text.NumberFormat; import javax.servlet.http.HttpSession; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartRenderingInfo; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.axis.ValueAxis; import org.jfree.chart.entity.StandardEntityCollection; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.labels.StandardPieToolTipGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.plot.PiePlot3D; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.renderer.category.BarRenderer3D; import org.jfree.chart.servlet.ServletUtilities; import org.jfree.chart.title.TextTitle; import org.jfree.chart.urls.CategoryURLGenerator; import org.jfree.chart.urls.PieURLGenerator; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; import org.jfree.ui.RectangleInsets; import org.quickbundle.tools.support.font.RmFont; /** * @author sentom * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class WebChart { private DefaultPieDataset data = new DefaultPieDataset(); private DefaultCategoryDataset dataCategory = new DefaultCategoryDataset(); public void setValue(String key, double value) { if(key == null) { key = ""; } data.setValue(key, value); dataCategory.setValue(value, key, key); } static Font fontLarge = new Font(RmFont.getDefaultFontName(), Font.PLAIN, 20); static Font fontSmall = new Font(RmFont.getDefaultFontName(), Font.PLAIN, 12); /** * 简单饼图,无链接+2D * * @param title * @param session * @param pw * @return */ public String generatePieChart(String title, HttpSession session, PrintWriter pw) { return generatePieChart(title, session, pw, null, false); } /** * 生成饼图 * * @param title 标题 * @param session session * @param pw * @param pug * @param is3d * @return */ public String generatePieChart(String title, HttpSession session, PrintWriter pw, PieURLGenerator pug, boolean is3d) { String filename = null; try { // 创建chart对象 PiePlot plot = null; if(is3d) { plot = new PiePlot3D(data); } else { plot = new PiePlot(data); } plot.setInsets(new RectangleInsets(0, 5, 5, 5)); // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})")); // 在统计图片上建链接 plot.setURLGenerator(pug); plot.setToolTipGenerator(new StandardPieToolTipGenerator()); JFreeChart chart = new JFreeChart("", fontLarge, plot, true); chart.setBackgroundPaint(Color.white);// 设置图片的背景色 TextTitle _title = new TextTitle(title); _title.setFont(fontLarge); // 设置图片标题的字体 chart.setTitle(_title); chart.getTitle().setFont(fontLarge); plot.setLabelFont(fontSmall); chart.getLegend().setItemFont(fontSmall); // 把生成的图片放到临时目录 ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); // 500是图片长度,300是图片高度 filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, info, session); ChartUtilities.writeImageMap(pw, filename, info, false); pw.flush(); } catch (Exception e) { System.out.println("Exception - " + e.toString()); e.printStackTrace(System.out); filename = "public_error_500x300.png"; } return filename; } /** * 简单饼图,无链接+3D * * @param title * @param session * @param pw * @return */ public String generateBarChart(String title, HttpSession session, PrintWriter pw) { return generateBarChart(title, session, pw, null, true); } /** * 生成柱图 * @param title * @param session * @param pw * @param cug * @param is3d * @return */ public String generateBarChart(String title, HttpSession session, PrintWriter pw, CategoryURLGenerator cug, boolean is3d) { String filename = null; try { JFreeChart chart = ChartFactory.createBarChart3D(title, "数值", "数据量", dataCategory, PlotOrientation.VERTICAL, false, false, false); chart.setBackgroundPaint(Color.white); chart.getTitle().setFont(fontLarge); CategoryPlot plot = chart.getCategoryPlot(); plot.setBackgroundPaint(Color.white); plot.setRangeGridlinePaint(Color.blue); CategoryAxis domainAxis=plot.getDomainAxis(); /*------设置X轴坐标上的文字-----------*/ domainAxis.setTickLabelFont(fontSmall); /*------设置X轴的标题文字------------*/ domainAxis.setLabelFont(fontSmall); //设置距离图片左端距离 domainAxis.setLowerMargin(0.05); // 设置Y轴显示整数 NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); ValueAxis rAxis = plot.getRangeAxis(); /*------设置Y轴坐标上的文字-----------*/ rAxis.setTickLabelFont(fontSmall); /*------设置Y轴的标题文字------------*/ rAxis.setLabelFont(fontSmall); BarRenderer renderer = null; if(is3d) { renderer = new BarRenderer3D(); } else { renderer = new BarRenderer(); } //设置柱的颜色 renderer.setSeriesPaint(0, new Color(0xff00)); //显示数值 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); //在统计图片上建链接 renderer.setBaseItemURLGenerator(cug); plot.setRenderer(renderer); // 把生成的图片放到临时目录 ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, info, session); ChartUtilities.writeImageMap(pw, filename, info, false); } catch (Exception e) { System.out.println("Exception - " + e.toString()); e.printStackTrace(System.out); filename = "public_error_500x300.png"; } return filename; } }