JFreeChart基本使用
报表组件,而且是一个免费的报表组件.
- JFreeChart开发包下载:https://sourceforge.net/projects/jfreechart/
- 对于此组件里面会有一系列的测试案例
- 编写一个饼状图
- 将JFReeChart的lib下的jar包拷贝到项目的WEB-INFO/lib下
package mao.shu.demo;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
public class JFCDemo {
public static void main(String[] args) {
DefaultPieDataset dataset = new DefaultPieDataset();
//添加数据
dataset.setValue("java",4000);
dataset.setValue("c/c++",3000);
dataset.setValue(".NET",1500);
dataset.setValue("other",1500);
JFreeChart chart = ChartFactory.createPieChart3D("程序开发使用语言所占比", //主标题的名称
dataset, //图标显示的数据集合
true,//是否显示子标题
true,//是否生成提示的标签
true); //是否生成URL链接
//处理图形上的乱码
//处理主标题的乱码
chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));
//处理子标题乱码
chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));
//获取图表区域对象
PiePlot3D categoryPlot = (PiePlot3D)chart.getPlot();
//处理图像上的乱码
categoryPlot.setLabelFont(new Font("宋体",Font.BOLD,15));
//设置图形的生成的数据文件信息,{0}表示每个数据的名称,{1}表示数据值,{2}表示所占x% 百分比
String format = "{0} {1} ({2})";
categoryPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(format));
//在E盘目录下生成图片
File file = new File("e:/pie.jpg");
try {
ChartUtilities.saveChartAsJPEG(file, chart, 500, 500);
} catch (IOException e) {
e.printStackTrace();
}
//使用ChartFrame对象显示图像
ChartFrame frame = new ChartFrame("饼状图",chart);
frame.setVisible(true);
frame.pack();
}
}
- 运行结果
JFreeChart结合Struts2使用
-
在struts2之中使用jfreechart除了需要用到JFreeChart基本的开发包之外,还需要使用到以下的开发包(版本可以使其他版本)
- struts2-jfreechart-plugin-2.0.6.jar
-
创建一个Action类,在Action类之中需要做以下操作
- 创建JFreeChart对象,并将其保存在类属性之中,类属性的名称为"char",这是固定的名称.
package mao.shu.action;
import java.awt.Font;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import com.opensymphony.xwork2.ActionSupport;
public class JFCAction extends ActionSupport {
private JFreeChart chart;
public String doCreate(){
DefaultPieDataset dataset = new DefaultPieDataset();
//添加数据
dataset.setValue("java",4000);
dataset.setValue("c/c++",3000);
dataset.setValue(".NET",1500);
dataset.setValue("other",1500);
this.chart = ChartFactory.createPieChart3D("程序开发使用语言所占比", //主标题的名称
dataset, //图标显示的数据集合
true,//是否显示子标题
true,//是否生成提示的标签
true); //是否生成URL链接
//处理图形上的乱码
//处理主标题的乱码
chart.getTitle().setFont(new Font("宋体",Font.BOLD,18));
//处理子标题乱码
chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,15));
//获取图表区域对象
PiePlot3D categoryPlot = (PiePlot3D)chart.getPlot();
//处理图像上的乱码
categoryPlot.setLabelFont(new Font("宋体",Font.BOLD,15));
//设置图形的生成的数据文件信息,{0}表示每个数据的名称,{1}表示数据值,{2}表示所占x% 百分比
String format = "{0} {1} ({2})";
categoryPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(format));
return SUCCESS;
}
public JFreeChart getChart() {
return chart;
}
public void setChart(JFreeChart chart) {
this.chart = chart;
}
}
- 配置struts.xml文件
- 其中<result-type> 标签之中的配置的class类就是在struts2-jfreechart-plugin-2.0.6.jar开发包之中有定义,所以如果没有导入开发包,将无法使用
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="root" namespace="/" extends="struts-default">
<result-types>
<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"></result-type>
</result-types>
<action name="JFCAction" class="mao.shu.action.JFCAction">
<result type="chart" name="success">
<param name="width">500</param>
<param name="height">500</param>
</result>
</action>
</package>
</struts>
- 在Struts2.x里面执行的过程实际上就是自己编写了一个页面,而后将Action中创建好的JFreeChart创建好的对象的内容进行绘图展示处理.