以下是本人写的JFreeChart报表开发公共类,可以生成柱状图、饼状图和线状图: package com.report; import java.awt.Color; import java.awt.Font; import java.awt.GradientPaint; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.DateAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.labels.StandardCategoryItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.PieDataset; import org.jfree.data.time.Month; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.RectangleInsets; public class ReportBuilder { private static final Log log = LogFactory.getLog(ReportBuilder.class); private static DateFormat format = DateFormat.getDateInstance(); /** * ����3D��״ͼ * @param dataSet * @param title * @param xText * @param yText * @return */ public static JFreeChart createChart(CategoryDataset dataSet,String title,String xText,String yText){ JFreeChart chart = ChartFactory.createBarChart3D(title, xText, yText, dataSet,PlotOrientation.VERTICAL,true,true,false); chart.setBackgroundPaint(Color.white);//������ CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setBackgroundPaint(Color.white); plot.setDomainGridlinesVisible(true); plot.setRangeGridlinePaint(Color.black); BarRenderer renderer = (BarRenderer) plot.getRenderer(); renderer.setDrawBarOutline(false); renderer.setBaseItemLabelFont(new Font("����黑体", Font.BOLD, 12)); renderer.setBaseLegendTextFont(new Font("黑体", 0, 10)); renderer.setBaseItemLabelsVisible(true); renderer.setMaximumBarWidth(0.05f); renderer.setDrawBarOutline(false); renderer.setShadowVisible(false); renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setItemLabelFont(new Font("����黑体", Font.ITALIC, 12)); renderer.setItemLabelPaint(Color.BLUE); renderer.setItemLabelsVisible(true); final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); rangeAxis.setLabelFont(new Font("黑体", 0, 12)); GradientPaint gp0 = new GradientPaint(0.5f, 0.5f, new Color(100, 100, 255), 0.0f, 0.0f, new Color(0, 0, 64)); renderer.setSeriesPaint(0, gp0); CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 12)); //Font.BOLD�ַ�Ӵֿ�ʹ��ǩ��ʾ���Щ domainAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 8)); domainAxis.setLowerMargin(0.03f); //�������ú����ǩ����ʾ��������ݼ��ĺ����ַ�����/n��ʵ�ֱ�ǩ�ַ�ֱ domainAxis.setMaximumCategoryLabelLines(255); domainAxis.setCategoryLabelPositionOffset(3); return chart; } /** * ����3D��״ͼ * @param dataSet * @param title * @return */ public static JFreeChart createChart(PieDataset dataSet,String title){ JFreeChart chart = ChartFactory.createPieChart3D(title, dataSet, true, true, true); //����ͼƬ����ɫ chart.setBackgroundPaint(Color.white); PiePlot piePlot = (PiePlot) chart.getPlot(); //����ͼ�α���ɫ piePlot.setBackgroundPaint(Color.white); //���������ʾ piePlot.setNoDataMessage("No data available"); //��LableΪ"One"����һ��"��"��430% piePlot.setExplodePercent(0, 0.3d); piePlot.setLabelFont(new Font("����",10,10)); return chart; } /** * ����ʱ����״ͼ * @param dataSet * @param title * @param xText * @param yText * @return */ public static JFreeChart createChart(XYDataset dataSet,String title,String xText,String yText){ JFreeChart chart = ChartFactory.createTimeSeriesChart(title, xText, yText, dataSet, true, true, false); chart.setBackgroundPaint(Color.white); XYPlot xyplot = (XYPlot)chart.getPlot(); //��� plot : XYPlot!! xyplot.setBackgroundPaint(Color.lightGray); xyplot.setDomainGridlinePaint(Color.white); xyplot.setRangeGridlinePaint(Color.white); xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); xyplot.setDomainCrosshairVisible(true); xyplot.setRangeCrosshairVisible(true); org.jfree.chart.renderer.xy.XYItemRenderer xyitemrenderer = xyplot.getRenderer(); if(xyitemrenderer instanceof XYLineAndShapeRenderer) { XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyitemrenderer; xylineandshaperenderer.setDrawSeriesLineAsPath(true); //��ݵ�ɼ� } DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //��domain ����������ʾ��ʽ���� dateaxis.setDateFormatOverride(new SimpleDateFormat("MMM-yyyy")); return chart; } /** * ��ȡ��״ͼ��ݼ� * @param xText * @param dataList * @return */ @SuppressWarnings("unchecked") public static CategoryDataset createCategoryDataset(List<ReportDataBean> dataList){ DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); List<ThreeData> list = new ArrayList<ThreeData>(); for(int i=0;i<dataList.size();i++){ ReportDataBean dataBean = dataList.get(i); String compare1 = dataBean.getCompare1(); String compare2 = dataBean.getCompare2(); Double value = dataBean.getValue(); ThreeData threeData = new ThreeData(value,compare1,compare2); list.add(threeData); } Collections.sort(list,new ThreeData()); Iterator<ThreeData> it = list.iterator(); while(it.hasNext()){ ThreeData threeData = it.next(); dataSet.addValue(threeData.value, threeData.rowKey, threeData.colKey); } return dataSet; } /** * ��ȡ��״ͼ���Դ * @param xText * @param dataList * @return */ public static PieDataset createPieDateSet(List<ReportDataBean> dataList){ DefaultPieDataset dataSet = new DefaultPieDataset(); List<ThreeData> list = new ArrayList<ThreeData>(); for(int i=0;i<dataList.size();i++){ ReportDataBean dataBean = dataList.get(i); String compare1 = dataBean.getCompare1(); String compare2 = dataBean.getCompare2(); Double value = dataBean.getValue(); ThreeData threeData = new ThreeData(value,compare1,compare2); list.add(threeData); } Collections.sort(list,new ThreeData()); Iterator<ThreeData> it = list.iterator(); while(it.hasNext()){ ThreeData threeData = it.next(); dataSet.setValue(threeData.colKey, threeData.value); } return dataSet; } /** * ��ȡʱ����״ͼ��ݼ� * @param xText * @param dataList * @return * @throws ParseException */ public static XYDataset createXYDataSet(String xText,List<ReportDataBean> dataList) throws ParseException{ TimeSeries timeSeries = new TimeSeries(xText,Month.class); List<ThreeData> list = new ArrayList<ThreeData>(); for(int i=0;i<dataList.size();i++){ ReportDataBean dataBean = dataList.get(i); String compare1 = dataBean.getCompare1(); String compare2 = dataBean.getCompare2(); Double value = dataBean.getValue(); ThreeData threeData = new ThreeData(value,compare1,compare2); list.add(threeData); } Collections.sort(list,new ThreeData()); Iterator<ThreeData> it = list.iterator(); while(it.hasNext()){ ThreeData threeData = it.next(); String colKey = threeData.colKey; Double value = threeData.value; Date date = format.parse(colKey); timeSeries.add(new Month(date.getMonth(),date.getYear()),value); } TimeSeriesCollection collection = new TimeSeriesCollection(); collection.addSeries(timeSeries); collection.setDomainIsPointsInTime(true); return collection; } /** * ����Ϊ�ļ� * @param chart ͼƬ���� * @param outputPath ����·�� * @param weight �� * @param height �� */ public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) { FileOutputStream out = null; try { File outFile = new File(outputPath); if (!outFile.getParentFile().exists()) { outFile.getParentFile().mkdirs(); } out = new FileOutputStream(outputPath); //����ΪJPEG ChartUtilities.writeChartAsJPEG(out,chart,800,600); out.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { } } } } static class ThreeData implements Comparator{ String rowKey;//�б�ǩ String colKey;//�б�ǩ double value;//ֵ ThreeData(){ } ThreeData(double value, String rowKey, String colKey){ this.value = value; this.rowKey = rowKey; this.colKey = colKey; } // �Ƚϵ��㷨 public int compare(Object obj1, Object obj2) { double valueTmp = ((ThreeData)obj1).value - ((ThreeData)obj2).value; return valueTmp > 0 ? -1 : (valueTmp < 0 ? 1 : 0); } } }