当前位置:编程学习 > JAVA >>

JFreeChart的简单应用以及解决中文显示方框的问题

JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。但是有的时候会出现方框的情况,下面就来通过例子来说明如何让中文显示出来。
要让一个JFreeChar生成图形并显示需要经过下面的步骤:
1、创建DataSet的数据集合
[java] 
/**
     * 创建一个数据集合
     * 
     * @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; 
    } 
2、通过ChartFactory创建JFreeChart图表
[java] 
JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题 
                data, // 数据集 
                true, // 是否显示图例 
                false, // 是否生成工具 
                false // 是否生成URL链接 
                );// 创建图表  
3、将图表显示出来
[java] 
ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart, 
            800, 450, null);// 输出图表  
下面是一个在Web页面上显示的例子:
[java] 
package org.ml.servlet; 
 
import java.awt.Font; 
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.chart.plot.PiePlot; 
import org.jfree.chart.title.LegendTitle; 
import org.jfree.chart.title.TextTitle; 
import org.jfree.data.general.DefaultPieDataset; 
 
public class ChartDemoServlet extends HttpServlet { 
 
    private static final long serialVersionUID = 1L; 
 
    public ChartDemoServlet() { 
        super(); 
    }  
 
    @Override 
    public void service(ServletRequest req, ServletResponse res) 
            throws ServletException, IOException { 
        res.setContentType("image/jpeg");// 将输出设置为image/jepg格式 
        DefaultPieDataset data = getDataSet();// 创建数据集合容器 
        JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题 
                data, // 数据集 
                true, // 是否显示图例 
                false, // 是否生成工具 
                false // 是否生成URL链接 
                );// 创建图表  
        ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart, 
                800, 450, 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; 
    } 

Web.xml中对Servlet的配置如下:
[html] 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5"  
    xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
  <servlet>  
    <servlet-name>ChartDemoServlet</servlet-name> 
    <servlet-class>org.ml.servlet.ChartDemoServlet</servlet-class> 
  </servlet> 
 
  <servlet-mapping> 
    <servlet-name>ChartDemoServlet</servlet-name> 
    <url-pattern>/servlet/ChartDemoServlet</url-pattern> 
  </servlet-mapping>  
</web-app> 
在浏览器地址栏中输入:http://localhost:10086/JFreeChart/servlet/ChartDemoServlet进行访问的到下面的显示结果:

从图表中可以看到,中文不能显示,都变成了一个个的小方框。要解决这个问题需要在代码中添加下面这样的设置。
[java]
Font titleFont = new Font("黑体", Font.BOLD, 20); 
TextTitle textTitle = chart.getTitle(); 
textTitle.setFont(titleFont);// 为标题设置上字体 
 
Font plotFont = new Font("宋体", Font.PLAIN, 16); 
PiePlot plot = (PiePlot) chart.getPlot(); 
plot.setLabelFont(plotFont); // 为饼图元素设置上字体 
 
Font LegendFont = new Font("楷体", Font.PLAIN, 18); 
LegendTitle legend = chart.

补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,