JFreeChat使用(一)

JFreeChart配置

官方网站 http://www.jfree.org/

下载jar包 http://sourceforge.net/project/showfiles.php?group_id=15494


我使用的版本是jfreechart-1.0.11
1 导入jar包 jcommon-1.0.14.jar
jfreechart-1.0.11.jar

2 不同的形式生成图片

(1)直接生成图片
public class BarChartTest {
public static void main(String[] args) {

CategoryDataset dataset = getDataSet2();
JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题
"水果", // 目录轴的显示标签
"产量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);

// 设置消除字体的锯齿渲染(解决中文问题)
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

Font font = new Font("SimSun", Font.PLAIN, 10);

// 为图例设置字体
LegendTitle legend = chart.getLegend();
legend.setItemFont(font);

// 设置标题字体
TextTitle title = null;
title = chart.getTitle();
title.setFont(new Font("SimSun", Font.BOLD, 15));

CategoryPlot plot = (CategoryPlot) chart.getPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
ValueAxis rAxis = plot.getRangeAxis();
// 设置X轴坐标上的文字
domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置X轴的标题文字
domainAxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置Y轴坐标上的文字
rAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12));
// 设置Y轴的标题文字
rAxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));

// X轴坐标上的标题文字产生旋转45度角
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:\\fruit.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 300,
null);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
}
}
}

/**
* 获取一个演示用的简单数据集对象
*
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(100, "", "苹果");
dataset.addValue(200, "", "梨子");
dataset.addValue(300, "", "葡萄");
dataset.addValue(400, "", "香蕉");
dataset.addValue(500, "", "荔枝");
return dataset;
}

/**
* 获取一个演示用的组合数据集对象
*
* @return
*/
private static CategoryDataset getDataSet2() {
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, "广州", "荔枝");
return dataset;
}

}


(2) SWING中生成图片
public class JFreeChartTest {

public static void main(String[] args) {

DefaultPieDataset dataSet = new DefaultPieDataset();

dataSet.setValue("管理人员", 25);
dataSet.setValue("市场人员", 25);
dataSet.setValue("开发人员", 45);
dataSet.setValue("其它人员", 10);

JFreeChart chart = ChartFactory.createPieChart("公司人员结构图", dataSet,
true, true, true);

Font ftt = new Font("黑体", Font.BOLD, 20);
Font ft = new Font("SimSun", 10, 10);//宋体

LegendTitle legend = null;
TextTitle txtTitle = null;
PiePlot categoryplot = null;

legend = chart.getLegend();
txtTitle = chart.getTitle();
categoryplot = (PiePlot) chart.getPlot();

txtTitle.setFont(ftt); // 设置标题字体
categoryplot.setLabelFont(ft);// 设置图片上固定指示文字字体
legend.setItemFont(ft);// 设置图例字体

ChartFrame chartFrame = new ChartFrame("某公司人员结构图", chart);
chartFrame.pack();
chartFrame.setVisible(true);

}
}

(3) WEB页面中输出图片

A 在web.xml中添加如下配置
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/DisplayChart</url-pattern>
</servlet-mapping>

B 页面

页面1 柱状图(以下页面没有对生成的图片中的乱码进行处理,参照上面可以设置好)

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>

<%@ page
import="org.jfree.data.*,
org.jfree.data.category.CategoryDataset,
org.jfree.chart.*,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset,
org.jfree.chart.servlet.ServletUtilities"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>JFreeChar生成图表</title>

</head>

<body>
<%
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, "广州", "荔枝");

JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题
"水果", // 目录轴的显示标签
"产量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);

String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
null, session);

String graphURL = request.getContextPath()
+ "/DisplayChart?filename=" + filename;

%>

<img src="<%=graphURL%>" width=500 height=300 border=0
usemap="#<%= filename %>">
</body>
</html>

页面2 饼图

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ page import="org.jfree.data.general.DefaultPieDataset"%>
<%@ page import="org.jfree.chart.JFreeChart"%>
<%@ page import="org.jfree.chart.plot.PiePlot"%>
<%@ page import="org.jfree.chart.ChartRenderingInfo"%>
<%@ page import="org.jfree.chart.servlet.ServletUtilities"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="org.jfree.chart.encoders.SunPNGEncoderAdapter"%>
<%
DefaultPieDataset data = new DefaultPieDataset();
data.setValue(" 六月 ", 500);
data.setValue(" 七月 ", 580);
data.setValue(" 八月 ", 828);
PiePlot plot = new PiePlot(data);

JFreeChart chart = new JFreeChart("",
JFreeChart.DEFAULT_TITLE_FONT, plot, true);
chart.setBackgroundPaint(java.awt.Color.white); // 可选,设置图片背景色
chart.setTitle(" Welcome to Jfreechart ! "); // 可选,设置图片标题
ChartRenderingInfo info = new ChartRenderingInfo(
new StandardEntityCollection());
// 500是图片长度,300是图片高度
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300,
info, session);
String graphURL = request.getContextPath()
+ "/DisplayChart?filename=" + filename;
%>
<HTML>
<HEAD>
<TITLE>Welcome to Jfreechart !</TITLE>
</HEAD>
<BODY>
<P ALIGN=" CENTER ">
<img src="<%=graphURL%>" width=500 height=300 border=0
usemap=" #<%= filename %> ">
</P>
</BODY>
</HTML>


你可能感兴趣的:(数据结构,servlet,swing,配置管理,jfreechart)