JfreeChart图形显示中文乱码问题,求大神指点。在哪里添加设置字体。能仔细讲下吗。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JfreeChart图形显示中文乱码问题,求大神指点。在哪里添加设置字体。能仔细讲下吗。相关的知识,希望对你有一定的参考价值。

public class SimpleBarChart extends JFrame

private static CategoryDataset createDataset()
String series1 = "联盟成员";
String category1 = "制造商";
String category2 = "运营商";
String category3 = "管制者";
String category4 = "其他";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(36, series1, category1);
dataset.addValue(37, series1, category2);
dataset.addValue(13, series1, category3);
dataset.addValue(25, series1, category4);
return dataset;

private static JFreeChart createChart(CategoryDataset dataset)
JFreeChart chart = ChartFactory.createBarChart(
"全球WCDMA产业联盟成员构成情况", // 报表标题
"成员", // 柱体排列轴标签
"数量", // 柱体数值范围轴标签
dataset, // 结果集
PlotOrientation.VERTICAL, // 柱状图的方向
false, // 是否显示图例
true, // 是否有工具条提示
false // 是否有链接
);
//设置图表背景颜色
chart.setBackgroundPaint(Color.WHITE);
// 取得CategoryPlot对象的引用,通过这个对象可以对图标进行具体的设置
CategoryPlot plot = (CategoryPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.BLACK);
CategoryItemRenderer renderer = plot.getRenderer();
renderer.setBaseItemLabelGenerator(
new StandardCategoryItemLabelGenerator());
renderer.setSeriesItemLabelsVisible(0, Boolean.TRUE);
BarRenderer barrenderer = (BarRenderer)plot.getRenderer();
barrenderer.setDrawBarOutline(true);
barrenderer.setOutlinePaint(Color.black);
barrenderer.setMaximumBarWidth(0.05);
barrenderer.setSeriesPaint(0, Color.blue);
//设置坐标
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setUpperMargin(0.15);

CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
return chart;

//主函数入口
public static void main(String[] args)
SimpleBarChart chartFrame = new SimpleBarChart();
chartFrame.setTitle("全球WCDMA产业联盟成员构成情况");
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartFrame.getContentPane().add(chartPanel);
chartFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
chartFrame.setBounds(200, 200, 500, 300);
chartFrame.setVisible(true);

参考技术A //在createChart函数开始时,设置主题样式
//创建主题样式
StandardChartTheme mChartTheme = new StandardChartTheme("CN");
//设置标题字体
mChartTheme.setExtraLargeFont(new Font("黑体", Font.BOLD, 20));
//设置轴向字体
mChartTheme.setLargeFont(new Font("宋体", Font.CENTER_BASELINE, 15));
//设置图例字体
mChartTheme.setRegularFont(new Font("宋体", Font.CENTER_BASELINE, 15));
//应用主题样式
ChartFactory.setChartTheme(mChartTheme);追问

谢谢。请问在jsp页面怎么显示该图片。
在jsp页面直接调用main方法之后该怎么做啊??

追答

很简单,看这http://www.blogjava.net/Alpha/archive/2007/01/13/93569.html

JFreechart在linux下不显示及中文乱码问题

一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉, 原因是jfreechart的在linux系统中需要访问java awt库提供......

技术分享
一.使用JFreeChart建的报表,在window下能正常显示,但是放到linux下就报错,而且有时候会把tomcat挂掉,
原因是jfreechart的在linux系统中需要访问java awt库提供的图形功能,而linux下的绝大多数版本的java awt类库都需要x server提供的一些功能。而基本上作服务器的系统都没有启动x server(甚至根本没安装)。
报错如下:
X connection to localhost:11.0 broken (explicit kill or server shutdown).
我解决方法如下:
vi /etc/profile
在最后加上 : export CATALINA_OPTS=‘-Djava.awt.headless=true‘
例如:
Java代码  
1.mysqlhome=/usr/local/mysql   
2.PATH=$PATH:$mysqlhome/bin:$PATH   
3.export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC   
4.export CATALINA_OPTS=‘-Djava.awt.headless=true‘  
mysqlhome=/usr/local/mysql
PATH=$PATH:$mysqlhome/bin:$PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
export CATALINA_OPTS=‘-Djava.awt.headless=true‘二.中文乱码问题
jfreechart报表在linux下中文乱码问题,因为jdk缺少中文字库造成的,解决方法就是加上字库 ,以下方法针对1.6可以生效1.5未测试。
1.确认%JavaHome%/jre/lib/fonts目录下存在zysong.ttf  simsun.ttf(这个是windows下C:/WINDOWS/simsun.ttc改名而来的)
2.在%JavaHome%/jre/lib/fonts目录下执行"ttmkfdir -o fonts.dir"命令,重新生成fonts.dir文件
3.确认/usr/share/fonts/zh_CN/TrueType目录存在,如果不存在则mkdir创建
4.确认/usr/share/fonts/zh_CN/TrueType目录下存在zysong.ttf  simsun.ttf
5.在%JavaHome%/jre/lib目录下,执行 cp fontconfig.RedHat.3.properties.src fontconfig.properties
6.重新启动tomcat,大功告成!
注:有的系统可能不需要simsun.ttf字体

如何支持带中文的图像
问题描述:
用户数量图、资金占比图等使用jfreechart开发的图像,中文显示为乱码
问题原因:
Linux上的jdk6(jre)本身不支持中文。
问题解决:
1)把XP下的字体C:\WINDOWS\FONTS\simsun.ttc(也就是宋体,大小为10M),把他重命名为 simsun.ttf。
2)拷贝simsun.ttf 字体到 /usr/share/fonts/zh_CN/TrueType/ 下
3)在linux命令行下执行:
fc-cache /usr/share/fonts/zh_CN/TrueType/ 字体安装完成了,就可以使用这个字体

程序中解决方案:
font =new Font("宋体",Font.PLAIN,12);
    chart.setTitle(new TextTitle("",font.deriveFont(14f)));
    CategoryPlot plot = (CategoryPlot)chart.getPlot();
    CategoryAxis categoryAxis = plot.getDomainAxis();
    categoryAxis.setTickLabelFont(font.deriveFont(12f));
    categoryAxis.setLabelFont(font.deriveFont(12f));
    //categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
    //设置角度
    NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();                
    numberAxis.setLabelFont(font.deriveFont(12f));         
    numberAxis.setTickLabelFont(font.deriveFont(12f));
    //plot.set
        chart.getTitle().setFont(font.deriveFont(14f)); // 设置标题字体
        //chart.getLegend().setItemFont(font);// 设置图例类别字体
        LegendTitle legendTitle = chart.getLegend(0);
        if (legendTitle != null){
            legendTitle.setItemFont(font.deriveFont(12f));
        }
文档来源:JFreechart在linux下不显示及中文乱码问题
























































以上是关于JfreeChart图形显示中文乱码问题,求大神指点。在哪里添加设置字体。能仔细讲下吗。的主要内容,如果未能解决你的问题,请参考以下文章

jsp网页用jfreechart做的饼图,出现汉字乱码,试了很多方法没解决,现象如下图所示,求大神帮忙啊

如何利用jfreechart生成柱状,饼状,折线形图形。

JFreechart在linux下不显示及中文乱码问题

mysql用GROUP_CONCAT合并查询出现乱码?求大神!!!

linux系统语言选择中文后乱码

win10的通知栏没有了那些快捷键,显示的为notification,像乱码一样,求大神求救!!!!!