为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

JFreeChart乱码解决

2011-07-19 17页 doc 141KB 16阅读

用户头像

is_782760

暂无简介

举报
JFreeChart乱码解决解决jfreechart中文乱码方案整理【图】 http://www.zihou.me/2009/12/17/708/ 2009年12月17日 admin 发表评论 阅读评论 这篇博文只是对网上关于jfreechart中文乱码解决方法的一个汇总整理。 我也是最近要使用到jfreechart这个图表工具,也是碰到了中文乱码这个问题,后来通过搜索(jfreechart图片乱码等关键词)解决了这个乱码,但发现一个问题就是有的文章只是解决了图表中乱码的某一个方面,比如图表标题,而有的文章不是解决图表标题乱码,却能够解决图表X、Y轴上文...
JFreeChart乱码解决
解决jfreechart中文乱码整理【图】 http://www.zihou.me/2009/12/17/708/ 2009年12月17日 admin 发表评论 阅读评论 这篇博文只是对网上关于jfreechart中文乱码解决方法的一个汇总整理。 我也是最近要使用到jfreechart这个图表工具,也是碰到了中文乱码这个问题,后来通过搜索(jfreechart图片乱码等关键词)解决了这个乱码,但发现一个问题就是有的文章只是解决了图表中乱码的某一个方面,比如图表标题,而有的文章不是解决图表标题乱码,却能够解决图表X、Y轴上文字和标题乱码以及底部中文乱码,有鉴于此,于是我就将这些解决方法都汇总在了一起,希望对碰到jfreechart中文乱码的朋友有帮助。 下图是一个柱形图表,非常典型的中文乱码(其他形式图表就不说明了,因为柱形非常有代表性): 以上图表对应的jsp文件代码为: <%@ page contentType="text/html;charset=UTF-8"%> <%@ page import="org.jfree.chart.ChartFactory, org.jfree.chart.JFreeChart, org.jfree.chart.plot.PlotOrientation, org.jfree.chart.servlet.ServletUtilities, org.jfree.data.category.CategoryDataset, org.jfree.data.general.DatasetUtilities, org.jfree.chart.plot.*, org.jfree.chart.labels.*, org.jfree.chart.renderer.category.BarRenderer3D, java.awt.*, org.jfree.ui.*, org.jfree.chart.axis.AxisLocation,org.jfree.chart.title.TextTitle,org.jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.NumberAxis"%> <% double[][] data = new double[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}}; String[] rowKeys = {"猪肉", "niurou","鸡肉", "鱼肉"}; String[] columnKeys = {"广州", "shenzhen", "东莞", "佛山"}; CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data); JFreeChart chart = ChartFactory.createBarChart3D("","肉类","销量",dataset,PlotOrientation.VERTICAL,true,true,false); CategoryPlot plot = chart.getCategoryPlot(); //设置网格背景颜色 plot.setBackgroundPaint(Color.white); //设置网格竖线颜色 plot.setDomainGridlinePaint(Color.pink); //设置网格横线颜色 plot.setRangeGridlinePaint(Color.pink); //显示每个柱的数值,并修改该数值的字体属性 BarRenderer3D renderer = new BarRenderer3D(); renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); //默认的数字显示在柱子中,通过如下两句可调整数字的显示 //注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); renderer.setItemLabelAnchorOffset(10D); renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12)); renderer.setItemLabelsVisible(true); //设置每个地区所包含的平行柱的之间距离 //renderer.setItemMargin(0.3); plot.setRenderer(renderer); //设置地区、销量的显示位置 //将下方的“肉类”放到上方 plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT); //将默认放在左边的“销量”放到右方 plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %> 注意到在以上的图表中,有四个位置的中文乱码: 1、  图表标题以及副标题乱码 2、  X轴乱码 3、  Y轴乱码 4、  图表底部乱码 如下图所示: 对这四个位置的乱码分别进行解决: NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis(); CategoryAxis domainAxis = plot.getDomainAxis(); 1、  图表标题以及副标题乱码 Font font = new Font("宋体", Font.BOLD, 16); TextTitle title = new TextTitle("肉类销量统计图", font); //副标题 TextTitle subtitle = new TextTitle(“副标题”, new Font(“黑体”, Font.BOLD, 12)); chart.addSubtitle(subtitle); chart.setTitle(title); //标题 2、  X轴乱码 2.1、X轴坐标上的文字: domainAxis.setTickLabelFont(new Font(“sans-serif”, Font.PLAIN, 11)); 2.2、X轴坐标标题(肉类) domainAxis.setLabelFont(new Font(“宋体”, Font.PLAIN, 12)); 3、  Y轴乱码 3.1、Y轴坐标上的文字: numberaxis.setTickLabelFont(new Font(“sans-serif”, Font.PLAIN, 12)); 3.2、Y轴坐标标题(销量): numberaxis.setLabelFont(new Font(“黑体”, Font.PLAIN, 12)); 4、  图表底部乱码(猪肉等文字) chart.getLegend().setItemFont(new Font(“宋体”, Font.PLAIN, 12)); 通过以上设置就解决了中文乱码了,解决中文乱码后的图表如下所示: 对应的完整代码为(jsp): <%@ page contentType="text/html;charset=UTF-8"%> <%@ page import="org.jfree.chart.ChartFactory, org.jfree.chart.JFreeChart, org.jfree.chart.plot.PlotOrientation, org.jfree.chart.servlet.ServletUtilities, org.jfree.data.category.CategoryDataset, org.jfree.data.general.DatasetUtilities, org.jfree.chart.plot.*, org.jfree.chart.labels.*, org.jfree.chart.renderer.category.BarRenderer3D, java.awt.*, org.jfree.ui.*, org.jfree.chart.axis.AxisLocation,org.jfree.chart.title.TextTitle,org.jfree.chart.axis.CategoryAxis,org.jfree.chart.axis.NumberAxis"%> <% double[][] data = new double[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}}; String[] rowKeys = {"猪肉", "niurou","鸡肉", "鱼肉"}; String[] columnKeys = {"广州", "shenzhen", "东莞", "佛山"}; CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data); JFreeChart chart = ChartFactory.createBarChart3D("","肉类","销量",dataset,PlotOrientation.VERTICAL,true,true,false); CategoryPlot plot = chart.getCategoryPlot(); //设置字体,不然会中文乱码的 Font font = new Font("宋体", Font.BOLD, 16); TextTitle title = new TextTitle("肉类销量统计图", font); //副标题 TextTitle subtitle = new TextTitle("副标题", new Font("黑体", Font.BOLD, 12)); chart.addSubtitle(subtitle); chart.setTitle(title); //标题 ////////////////////////// NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis(); CategoryAxis domainAxis = plot.getDomainAxis(); /*------设置X轴坐标上的文字-----------*/ domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); /*------设置X轴的标题文字------------*/ domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); /*------设置Y轴坐标上的文字-----------*/ numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); /*------设置Y轴的标题文字------------*/ numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12)); /*------这句代码解决了底部汉字乱码的问题-----------*/ chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); //设置网格背景颜色 plot.setBackgroundPaint(Color.white); //设置网格竖线颜色 plot.setDomainGridlinePaint(Color.pink); //设置网格横线颜色 plot.setRangeGridlinePaint(Color.pink); //显示每个柱的数值,并修改该数值的字体属性 BarRenderer3D renderer = new BarRenderer3D(); renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); //默认的数字显示在柱子中,通过如下两句可调整数字的显示 //注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); renderer.setItemLabelAnchorOffset(10D); renderer.setItemLabelFont(new Font("宋体", Font.PLAIN, 12)); renderer.setItemLabelsVisible(true); //设置每个地区所包含的平行柱的之间距离 //renderer.setItemMargin(0.3); plot.setRenderer(renderer); //设置地区、销量的显示位置 //将下方的“肉类”放到上方 plot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT); //将默认放在左边的“销量”放到右方 plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); String filename = ServletUtilities.saveChartAsPNG(chart, 700, 400, null, session); String graphURL = request.getContextPath() + "/DisplayChart?filename=" + filename; %> 附录: 1、  在使用前必须先在web.xml中配置一下servlet,配置很简单,可以根据自己具体情况配置,以下是我配置的: DisplayChart org.jfree.chart.servlet.DisplayChart 1 DisplayChart /DisplayChart 2、附件中是关于饼图、柱形图、曲线图的使用写法例子,也是从网上搜集而来,感觉还是很不错的,也整理在这里了。 下载地址:http://www.blogjava.net/Files/bbmonkey62/jfreechart.rar 3、关于Jfreechart的简单介绍: JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表中,并且得到广泛的应用。 JFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。 其下载地址为:http://sourceforge.net/projects/jfreechart/files/ 我使用的就是目前最新的版本1.0.13。 JFreeChart使用 文章分类:Java编程  JFreeChart使用手册男人味,准备好了? 一、简介 JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,是一种Java图形解决方案(Application/Applet/Servlet/Jsp)。 二、安装配置 当前最新版本是jfreechart-1.0.3 ,应下载的包: jfreechart-1.0.3.zip(项目包) jfreechart-1.0.3-javadocs.zip(API参考文档) 1、  首先解压jfreechart-1.0.3.zip,并关注三个文件:  jfreechart-1.0.3.jar、 jcommon-1.0.6.jar、gnujaxp.jar(这个包就不导进去了,可能导致警告) 2、  接着把前述三个文件分别考到: %JAVA_HOME%\LIB及相应项目的\WEB-INF\LIB 3、  配置环境变量CLASSPATH 4、 在\WEB-INF\web.xml文件中加入                     DisplayChart                     org.jfree.chart.servlet.DisplayChart                                     DisplayChart                     /servlet/DisplayChart         三、功能介绍 pie charts (2D and 3D):饼图(平面和立体)     bar charts (regular and stacked, with an optional 3D effect):柱状图     line and area charts:曲线图 time series, high/low/open/close charts and candle stick charts:时序图 图形可以导出成PNG和JPEG格式 四、现已封装的模式有 二维矩状图 三维矩状图  二维饼状图  三维饼状图  线状序列图  时间序列图 五、实现图表生成步骤 1、             Dataset对象的创建生成 2、             JFreeChart对象的创建生成 3、             URLGenerator的控制生成 六、原理 将生成的JFreeChart对象,以流的形式生成用PNG格式或JPEG格式系统临时文件,然后就可以被访问请求。 七、在实现图表生成中可能用到的接口与类 org.jfree.chart.JFreeChart:图表对象类 org.jfree.data.category.XXXDataSet:数据集对象类 org.jfree.chart.plot.XXXPlot图表区域对象类  org.jfree.chart.axis.XXXAxis:轴对象类 org.jfree.chart.render.XXXRender:修饰刷对象类 可参考(API参考文档) 八、实例 1、              获取数据集的方式: 1)              以JDBC方式,通过访问封装类CreateDataSetFromJdbc.java  readPieData(String sql)方法获得饼图数据集 readCategoryData(String sql) 获得矩图数据集 readXYData(String sql)  获得序列表数据集 主要写好相应的sql语句 2)              通过自已的方式获得数据,然后数据集的 setValue(Comparable key, Number value) setValue(Number value, Comparable rowKey, Comparable columnKey) 2              继承基类BaseChartURLGenerator里的方法及实现接口ControlURLGenerator。(仿照已有的模式)针对web应用 其中会用到封装的方法类ChartPlotRender、CreateChart、LabelGenerator 九、建议 为每一个应用jfreechart图表的模块写一SubChartURLGenerator类(继承自BaseChartURLGenerator) 十、详细情况可以仿照工作量图表处理 十一、       详细 (1)      获取数据集dataset 判断数据获取是用sql语句组装方便些,还是自己通过其它方式获取,再放到dataset方便些。 如果是前者,可能只需要写好sql,再调用封装好的CreateDataSetFromJdbc就可以获得数据集,这个当然是针对应用数据简单的。 如果是后者,就需要你自己仿照我在质安站工作量查询中的图表处理例子获得相应的dataset,先通过原来自己的方式获得数据,然后写好一个类方法,把传过的数据一个一个的set到数据集中。 (2)      获得图表对象jfreechart 写好一个方法,针对不同的类型的图表,使用封装好的CreateChart类及上步所获得的数据集dataset,生成相应图表。并为图表配入title,citatory,value参数。 (3)      图表对象表现形式 对于web页中引用,则可以考虑新建一个继承自封装的BaseChartURLGenerator类的子类(可以考虑有前两步的方法放到此类中),针对其具体控制,实现接口ControlURLGenerator写好一个控制方法,并引用上步的jfreechart对象,调用已有的方法setChartURL(request, chart);
/
本文档为【JFreeChart乱码解决】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索