前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JFreeChart饼状图Web应用及JFreeChart中文乱码解决

JFreeChart饼状图Web应用及JFreeChart中文乱码解决

作者头像
the5fire
发布2019-02-28 10:27:48
1.4K0
发布2019-02-28 10:27:48
举报
文章被收录于专栏:Python程序员杂谈

对于任何一款数据统计,或者是数据管理软件来说有一个直观的图形显示各个区域数据的分布无疑是让系统更好的为人服务的一个特色。比如说:进销存软件,CMS,DRP。一个直观的数据分布、统计显示是相当的重要,这里我就是简单的使用JFreeChart演示一下。 关于使用JFreeChart乱码的问题,我所知道的有两种不同的解决方案,一种是在生成图片的时候要设置编码格式,这个试了一下,本地生成图片没问题,不过web的没有测试成功;第二种是使用老版本的JfreeChart,目前最新的是1.0.13,使用1.0.10就可以解决乱码问题。不知道是不是这个组件开发的问题。JFreeChart1.0.10下载地址: http://u.115.com/file/f4571d9153

首先进行本地生成图片的演示: 建立一个类,BarChartDemo.java:

.. code:: java

代码语言:javascript
复制
package com.demo;

import java.io.FileOutputStream;
import java.io.IOException;

import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.*;

/**
* 该类用于演示最简单的柱状图生成
* @author 胡阳
*/
public class BarChartDemo {

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

        FileOutputStream fos_jpg = null;

        try {
            fos_jpg = new FileOutputStream("D:\\fruit.jpg");
            ChartUtilities.writeChartAsJPEG(fos_jpg,1.0f,chart,400,300,null);
        } finally {
            try {
                fos_jpg.close();
            } catch (Exception e) { }
        }

    }

    /**
    * 获取一个演示用的简单数据集对象
    * @return
    */

    private static CategoryDataset getDataSet() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(100, null, "苹果");
        dataset.addValue(200, null, "梨子");
        dataset.addValue(300, null, "葡萄");
        dataset.addValue(400, null, "香蕉");
        dataset.addValue(500, null, "荔枝");
        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;
    }
}

运行一下,即可在D盘下生成一饼状图图片。哦,忘了说了,要先把JFreeChart1.0.10包里面的jcommon-1.10.13.jar和jfreechart-1.0.10.jar以及gnujaxp.jar拷打WEB-INF目录的lib文件下。

WEB使用演示: 首先建立一个Servlet,BarChartServlet.java:

::

代码语言:javascript
复制
package com.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

/**
 * 输出图形的一个Servlet
 * @author 胡阳
 *
 */
public class BarChartServlet extends HttpServlet {

    public void service(ServletRequest req, ServletResponse res)
    throws ServletException, IOException {
            res.setContentType("image/jpeg");
            DefaultPieDataset data = getDataSet();
            JFreeChart chart = ChartFactory.createPieChart3D("水果产量图",
                    data,
                    true,
                    false,
                    false
        );

        ChartUtilities.writeChartAsJPEG(res.getOutputStream(),1.0f,chart,400,300,null);
    }
    /**
    * 获取一个演示用的简单数据集对象
    * @return
    */
    private static DefaultPieDataset getDataSet() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("苹果",100);
        dataset.setValue("梨子",200);
        dataset.setValue("葡萄",300);
        dataset.setValue("香蕉",400);
        dataset.setValue("荔枝",500);
        return dataset;
    }

}

然后配置xml文件:

::

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>BarChartServlet</servlet-name>
        <servlet-class>com.web.BarChartServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BarChartServlet</servlet-name>
        <url-pattern>/servlet/BarChartServlet</url-pattern>
    </servlet-mapping>
</web-app>

最后建立index.jsp页面进行效果测试:

::

代码语言:javascript
复制
<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
<img alt="饼状图" src="servlet/BarChartServlet">
</body>
</html>

最后效果:

—EOF—

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-01-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档