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>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值