基于jfreechart的动态数据可视化应用开发(13)
时间:2016-12-12 19:27 来源:毕业论文 作者:毕业论文 点击:次
后来我发现ChartFrame是继承自javax.swing.JFrame的,也就是在JFrame上显示中文有问题。 Class ChartFrame java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame javax.swing.JFrame org.jfree.chart.ChartFrame 后来我想到以前JAVA课程老师说到的改变font字体,于是我编译了如下的代码添加到ChartFactory.createPieChart之前: standardChartTheme standardChartTheme=new StandardChartTheme("CN"); //设置标题字体 standardChartTheme.setExtraLargeFont(new Font("隶书",Font.BOLD,20)); //设置图例的字体 standardChartTheme.setRegularFont(new Font("宋书",Font.PLAIN,15)); //设置轴向的字体 standardChartTheme.setLargeFont(new Font("宋书",Font.PLAIN,15)); //应用主题样式 chartFactory.setChartTheme(standardChartTheme); 另一种极端的方法就是直接改jar包的源代码。比如源码中有setFont(new Font(xxx, Font.PLAIN, 18)); 把xxx改为宋体,我使用的JFreeChart的.jar包为1.0.14,太新的包对中文显示可能有问题,所以最好还是用更早的版本。 于是综合所有办法,采用换包(使用1.0.10)与设置font的方法重新写了一个程序直接将图片生成到本地磁盘。 package org.test.jfreechart; import java.awt.Font; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; 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.data.general.DefaultPieDataset; public class JFreeChartTest3 { public static DefaultPieDataset getDataset(){ DefaultPieDataset dataset = new DefaultPieDataset(); dpd.setValue("管理人员", 25); //输入数据 dpd.setValue("市场人员", 25); dpd.setValue("开发人员", 45); dpd.setValue("其他人员", 10); JFreeChart jfree = ChartFactory.createPieChart("某公司人员组织数据图",dpt,true,true,false); ChartFrame cf = new ChartFrame("某公司人员组织数据图",jfree); cf.pack(); cf.setVisible(true); } } public static void main(String []args){ JFreeChart chart = ChartFactory.createPieChart("某公司人员组织结构图",getDataset(),true,true,true); Font font = new Font("SimSun",10,20); chart.getTitle().setFont(font); LegendTitle legend = chart.getLegend(0); legend.setItemFont(font); PiePlot plot = (PiePlot)chart.getPlot(); plot.setLabelFont(font); try { OutputStream out = new FileOutputStream("com.jpeg"); try { ChartUtilities.writeChartAsEG(out,chart,500,400);out.close(); } catch (IOException e) {e.printStackTrace();} } catch (FileNotFoundException e) { e.printStackTrace(); }}} 经过修改后,终于解决了乱码,图片显示如下: 图4.14 正确的输出结果 终于,中文显示正常,问题解决。同样将JFreeChart应用到JSP页面中,也能正常显示,无任何问题。 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="org.jfree.data.general.DefaultPieDataset" %> <%@ page import="org.jfree.chart.JFreeChart" %> <%@ page import="org.jfree.chart.ChartFactory" %> <%@ page import="org.jfree.chart.servlet.ServletUtilities" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> (责任编辑:qin) |