当前位置:文档之家› jfreechart帮助文档

jfreechart帮助文档

jfreechart帮助文档
jfreechart帮助文档

一.下载与环境配置

1. 下载JFreeChart

我们需要的包为jfreechart-1.0.6.jar和jcommon-1.0.10.jar

jFreeChart与Struts2的组合:

一,加入Struts2支持

二,加入struts2-jfreechart-plugin-2.1.8.1.jar

注意:有的版本的此包有点小问题,此包内有一个struts-plugin.xml内容如下:

Xml代码

1

2

3

4

5

class="org.apache.struts2.dispatcher.ChartResult">

6150

7200

8

9

10

11

12

若该package没有继承struts-default则需要手动加上extends="struts-default"再重新用jdk打包

三,在action中生成我们的图片报表

package com.ynbs.manage.jfreechart;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.data.category.DefaultCategoryDataset;

import org.jfree.data.general.DefaultPieDataset;

import org.jfree.data.time.Month;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

import com.ynbs.javaeeframework.base.vo.BaseVo;

import com.ynbs.manage.base.action.ManageAction;

public class ViewResultAction extends ManageAction {

/**

*

*/

private static final long serialVersionUID = 1L;

private BaseVo baseVo ;

private JfreechartUtils jfutil=new JfreechartUtils();

public ViewResultAction() {

this.baseVo = new BaseVo() ;

}

public BaseVo getModel() {

return this.baseVo ;

}

public String navigation() throws Exception {

return SUCCESS ;

}

/**

* 这里的JFreeChart的变量名称必须是chart(这是jfreeChart插件不足的地方)*/

private JFreeChart chart = null;

@SuppressWarnings("unchecked")

//柱状图

public String barchart() throws Exception {

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(100, "北京", "苹果");

dataset.addValue(100, "上海", "苹果");

dataset.addValue(100, "广州", "苹果");

dataset.addValue(200, "北京", "梨子");

dataset.addValue(200, "上海", "梨子");

dataset.addValue(200, "广州", "梨子");

dataset.addValue(300, "北京", "葡萄");

dataset.addValue(300, "上海", "葡萄");

dataset.addValue(300, "广州", "葡萄");

dataset.addValue(400, "北京", "香蕉");

dataset.addValue(400, "上海", "香蕉");

dataset.addValue(400, "广州", "香蕉");

dataset.addValue(500, "北京", "荔枝");

dataset.addValue(500, "上海", "荔枝");

dataset.addValue(500, "广州", "荔枝");

chart = ChartFactory.createBarChart3D(

"水果产量图", // 图表标题

"水果", // 目录轴的显示标签

"产量", // 数值轴的显示标签

dataset, // 数据集

PlotOrientation.VERTICAL, // 图表方向:水平、垂直

true, // 是否显示图例(对于简单的柱状图必须是false)

true, // 是否生成工具

true // 是否生成URL链接

);

new JfreechartUtils().checkbar(chart);

return "barchart";

}

//饼图

public String piechart() throws Exception {

DefaultPieDataset dataset = new DefaultPieDataset();

dataset.setValue("苹果",100);

dataset.setValue("梨子",200);

dataset.setValue("葡萄",300);

dataset.setValue("香蕉",400);

dataset.setValue("荔枝",500);

chart =ChartFactory.createPieChart3D("水果产量图", // 图表标题dataset,

true, // 是否显示图例

false,

false

);

jfutil.checkpie(chart);

return "piechart";

}

//折线图

public String linechart() throws Exception {

TimeSeries timeSer1 = new TimeSeries("2006年度", Month.class);

TimeSeriesCollection dataset=new TimeSeriesCollection();

timeSer1.add(new Month(1,2007),11200);

timeSer1.add(new Month(2,2007),9000);

timeSer1.add(new Month(3,2007),6200);

timeSer1.add(new Month(4,2007),8200);

timeSer1.add(new Month(5,2007),8200);

timeSer1.add(new Month(6,2007),12200);

timeSer1.add(new Month(7,2007),13200);

timeSer1.add(new Month(8,2007),8300);

timeSer1.add(new Month(9,2007),12400);

timeSer1.add(new Month(10,2007),12500);

timeSer1.add(new Month(11,2007),13600);

timeSer1.add(new Month(12,2007),12500);

TimeSeries timeSer2 = new TimeSeries("2007年度", Month.class);

timeSer2.add(new Month(1,2007),1100);

timeSer2.add(new Month(2,2007),900);

timeSer2.add(new Month(3,2007),620);

timeSer2.add(new Month(4,2007),820);

timeSer2.add(new Month(5,2007),820);

timeSer2.add(new Month(6,2007),1220);

timeSer2.add(new Month(7,2007),1320);

timeSer2.add(new Month(8,2007),830);

timeSer2.add(new Month(9,2007),1240);

timeSer2.add(new Month(10,2007),1250);

timeSer2.add(new Month(11,2007),1360);

timeSer2.add(new Month(12,2007),1250);

dataset.addSeries(timeSer1);

dataset.addSeries(timeSer2);

chart=ChartFactory.createTimeSeriesChart("访问量统计时间线","月份","访问量",dataset,true,true,true);

jfutil.checkline(chart);

return "linechart";

}

public JFreeChart getChart() {

return chart;

}

public void setChart(JFreeChart chart) {

this.chart = chart;

}

}

//附加JfreechartUtils 解决乱码类

package com.ynbs.manage.jfreechart;

import java.awt.BasicStroke;

import java.awt.Color;

import java.awt.Font;

import java.text.DecimalFormat;

import java.text.NumberFormat;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.CategoryAxis;

import org.jfree.chart.axis.CategoryLabelPositions;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.axis.ValueAxis;

import https://www.doczj.com/doc/555816832.html,bels.ItemLabelAnchor;

import https://www.doczj.com/doc/555816832.html,bels.ItemLabelPosition;

import https://www.doczj.com/doc/555816832.html,bels.StandardCategoryItemLabelGenerator; import https://www.doczj.com/doc/555816832.html,bels.StandardPieSectionLabelGenerator; import https://www.doczj.com/doc/555816832.html,bels.StandardPieToolTipGenerator;

import https://www.doczj.com/doc/555816832.html,bels.StandardXYItemLabelGenerator; import org.jfree.chart.plot.CategoryPlot;

import org.jfree.chart.plot.PiePlot;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.category.BarRenderer3D;

import org.jfree.chart.renderer.xy.XYItemRenderer;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.ui.TextAnchor;

public final class JfreechartUtils {

public JfreechartUtils() {

}

/**

* 解决柱状图乱码

*

*

*/

public static void checkbar(JFreeChart chart)

{

CategoryPlot plot = (CategoryPlot) chart.getPlot();

// 设置水平方向的样式

CategoryAxis categoryAxis = plot.getDomainAxis();

categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));

categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

// 设置垂直方向的样式

NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();

numberAxis.setLabelFont(new Font("仿宋", https://www.doczj.com/doc/555816832.html,YOUT_NO_LIMIT_CONTEXT, 18));

// 获得报表下面部分

// chart.getLegend();

CategoryAxis domainAxis = plot.getDomainAxis();

// 设置水平底部列表

domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 14));

// 设置水平底部标题

domainAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 12));

// 设置锤子标题

ValueAxis rangeAxis = plot.getRangeAxis();

rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 18));

// 设置说明的字体

chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 18));

chart.getTitle().setFont(new Font("黑体", Font.BOLD, 20));

BarRenderer3D renderer= new BarRenderer3D();

renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());

renderer.setBaseItemLabelsVisible(true);

//默认的数字显示在柱子中,通过如下两句可调整数字的显示//注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题

renderer.setBasePositiveItemLabelPosition(new

ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));

renderer.setItemLabelAnchorOffset(10D);

//设置每个地区所包含的平行柱的之间距离

//renderer.setItemMargin(0.3);

plot.setRenderer(renderer);

}

/**

* 解决饼图乱码

*

*

*/

public static void checkpie(JFreeChart chart)

{

chart.getTitle().setFont(new Font("黑体", Font.BOLD, 20));

PiePlot piePlot = (PiePlot) chart.getPlot();

String unitSytle = "{0}={1}({2})";

piePlot.setNoDataMessage("无对应的数据,请重新查询。");

piePlot.setNoDataMessagePaint(Color.red);

//指定section 轮廓线的厚度(OutlinePaint不能为null)

piePlot.setOutlineStroke(new BasicStroke(0));

//设置第一个section 的开始位置,默认是12点钟方向

piePlot.setStartAngle(90);

piePlot.setToolTipGenerator(new StandardPieToolTipGenerator(unitSytle,

NumberFormat.getNumberInstance(),

new DecimalFormat("0.00%")));

//指定图片的透明度

piePlot.setForegroundAlpha(0.5f);

//引出标签显示样式

piePlot.setLabelGenerator(new

StandardPieSectionLabelGenerator(unitSytle,

NumberFormat.getNumberInstance(),

new DecimalFormat("0.00%")));

//图例显示样式

piePlot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(unitSytle,

NumberFormat.getNumberInstance(),

new DecimalFormat("0.00%")));

piePlot.setLabelFont(new Font("黑体", Font.BOLD, 10));

chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 10));

}

/**

* 解决折线图乱码

*

*

*/

public static void checkline(JFreeChart chart)

{

chart.setAntiAlias(true);

XYPlot plot = (XYPlot) chart.getPlot();

XYLineAndShapeRenderer xylineandshaperenderer =(XYLineAndShapeRenderer)plot.getRenderer();

xylineandshaperenderer.setBaseShapesVisible(true);

XYItemRenderer xyitem=plot.getRenderer();

xyitem.setBaseItemLabelsVisible(true);

xyitem.setBasePositiveItemLabelPosition(new

ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT));

xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());

xyitem.setBaseItemLabelFont(new Font("Dialog",1,14));

plot.setRenderer(xyitem);

ValueAxis valueAxis = plot.getDomainAxis();

// 设置x轴上面的字体

valueAxis.setTickLabelFont(new Font("隶书", Font.ITALIC, 12));

// 设置X轴的标题文字

valueAxis.setLabelFont(new Font("隶书", Font.ITALIC, 12));

NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();

// 设置y轴上的字体

numberAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 13));

// 设置y轴上的标题字体

numberAxis.setLabelFont(new Font("宋体", Font.PLAIN, 13));

chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 18));

chart.getTitle().setFont(new Font("黑体", Font.BOLD, 20));

}

}

四,struts.xml中的配置:

600

800

600

800

600

800

显示结果如下:

柱状图

饼图

折现图

相关主题
文本预览
相关文档 最新文档