在使用JFreeChart生成图表时,可能会出现中文乱码,下面给出两种解决方法。
1、设置主题样式(推荐方法)
主题样式是在建立图表之前进行设置,JFreeChart图表一般包括3个部分:Title(图表标题)、Plot(图表主体)、Legend(图表图例),主题是统一对这三个部分进行字体设置
- //创建主题样式
- 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);
实例:
- import java.awt.Font;
- import org.jfree.chart.ChartFactory;
- import org.jfree.chart.ChartFrame;
- import org.jfree.chart.JFreeChart;
- import org.jfree.chart.StandardChartTheme;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.data.category.CategoryDataset;
- import org.jfree.data.category.DefaultCategoryDataset;
- public class Bar {
- public static void main(String[] args) {
- CategoryDataset mDataset = GetDataset();
- //创建主题样式
- 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);
- ///////////////以上主题设置必须位于创建图表函数之前才能生效////////////
- JFreeChart mBarChart = ChartFactory.createBarChart3D(
- "学校人员分布图", //图表标题
- "类型", //横轴(目录轴)标签
- "数量", //纵轴(数值轴)标签
- mDataset, //数据集
- PlotOrientation.VERTICAL, //图表方向
- true, //是否显示图例
- true, //是否生成提示工具
- false); //是否生成url连接
- ChartFrame mChartFrame = new ChartFrame("学校人员分布图", mBarChart);
- mChartFrame.pack();
- mChartFrame.setVisible(true);
- }
- public static CategoryDataset GetDataset()
- {
- DefaultCategoryDataset mDataset = new DefaultCategoryDataset();
- mDataset.addValue(2000, "清华大学", "本科生");
- mDataset.addValue(1500, "清华大学", "研究生");
- mDataset.addValue(1000, "清华大学", "博士生");
- mDataset.addValue(900, "清华大学", "讲师");
- mDataset.addValue(800, "清华大学", "副教授");
- mDataset.addValue(300, "清华大学", "教授");
- mDataset.addValue(600, "清华大学", "行政人员");
- mDataset.addValue(400, "清华大学", "管理人员");
- return mDataset;
- }
- }
2、对乱码的字体分别进行设置
一般Title和Legend的设置方法比较单一:
- //图表标题设置
- TextTitle mTextTitle = mBarChart.getTitle();
- mTextTitle.setFont(new Font("黑体", Font.BOLD, 20));
- //图表图例设置
- LegendTitle mLegend = mBarChart.getLegend();
- if(mLegend != null)
- mLegend.setItemFont(new Font("宋体", Font.CENTER_BASELINE, 15));
简洁的方式还可以这样:
- //图表标题设置
- mBarChart.setTitle(new TextTitle("学校人员分布图",new Font("黑体", Font.BOLD, 20)));
- //图表图例设置
- mBarChart.getLegend().setItemFont(new Font("宋体", Font.CENTER_BASELINE, 15));
Plot对应不同的图表,它的设置方法不同。
柱状图:
先取得CategoryPlot的对象,再分别设置x轴和y轴的坐标字体以及标题字体。x轴使用CategoryAxis,y轴使用ValueAxis
- //设置柱状图轴
- CategoryPlot mPlot = (CategoryPlot)mBarChart.getPlot();
- //x轴
- CategoryAxis mDomainAxis = mPlot.getDomainAxis();
- //设置x轴标题的字体
- mDomainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));
- //设置x轴坐标字体
- mDomainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15));
- //y轴
- ValueAxis mValueAxis = mPlot.getRangeAxis();
- //设置y轴标题字体
- mValueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));
- //设置y轴坐标字体
- mValueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15));
饼图:
饼图没有x轴和y轴,所以不用设置,需要设置的是饼图上指示比例的标签的字体
- PiePlot mChartPlot = (PiePlot)mChart.getPlot();
- LabelFont(new Font("宋体", Font.CENTER_BASELINE, 15));
时序图:
时序图有x轴和y轴,所以Plot的设置与柱状图基本相同,只是时序图声明的Plot类型为XYPlot,柱状图为CateGoryPlot
- //设置柱状图轴
- XYPlot mPlot = (XYPlot)mTimeChart.getPlot();
- //x轴
- ValueAxis mDomainAxis = mPlot.getDomainAxis();
- //设置x轴标题的字体
- mDomainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));
- //设置x轴坐标字体
- mDomainAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15));
- //y轴
- ValueAxis mValueAxis = mPlot.getRangeAxis();
- //设置y轴标题字体
- mValueAxis.setLabelFont(new Font("宋体", Font.PLAIN, 15));
- //设置y轴坐标字体
- mValueAxis.setTickLabelFont(new Font("宋体", Font.PLAIN, 15));
相关推荐
在Linux环境下,使用Java的JFreeChart库生成图表时,可能会遇到一个问题,即图表中的文本出现乱码。这是因为JFreeChart默认使用的字体可能在Linux系统中不被支持,或者编码设置不正确。解决这个问题的关键在于引入...
在使用JFreeChart库生成图表时,可能会遇到中文乱码的问题,这主要是因为JFreeChart默认的字体不支持中文显示。解决这个问题的关键在于为图表的各个部分(如标题、轴标签、图例等)设置合适的中文支持字体。下面将...
标题 "jfreechart部署在Linux服务器上生成图片乱码的解决方案" 涉及到的主要知识点是关于Java图形库JFreeChart在Linux环境中的使用,特别是解决中文字符乱码的问题。JFreeChart是一个广泛使用的开源Java库,它允许...
JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的2D和3D图表,如柱状图、折线图和...在你的项目中,可以参考提供的文件“jfreechart”来查看具体的实现方式,这将有助于你更好地理解和应用这些解决方案。
JFreeChart在linux下生成图表时中文乱码,原因是JRE没有找到对应中文字库,解决方法如下:
标题“JFreechart在Linux下不显示及中文乱码问题”指出的是在使用JFreechart库创建图表时,在Linux操作系统环境下遇到的两个主要问题:图表无法正常显示以及中文字符出现乱码。JFreechart是一个Java库,用于生成高...
本文将深入探讨如何解决JFreeChart中的中文乱码问题,并通过具体的代码示例来演示解决方案。 #### 一、问题背景 JFreeChart是一款开源的Java图表库,它能够生成各种类型的图表,如折线图、柱状图、饼图等。但在...
通过以上步骤,你应该能够成功解决JFreeChart在Linux服务器上生成图片时的中文乱码问题。值得注意的是,这种方法不仅适用于JFreeChart,还适用于其他依赖于Java运行环境显示中文字符的程序。在实际操作中,应根据...
JFreeChart是一个强大的Java库,它提供了一套完整的解决方案来创建各种图表,如饼图、柱状图、线图等。然而,由于编码问题,当图表中包含中文字符时,可能会显示为方框或无法识别的字符。解决这个问题需要对Java的...
通过以上步骤,你应该能够在Linux环境中成功解决JFreeChart的中文乱码问题。记住,关键在于正确配置字体和确保Java能够找到并使用这些字体。在实际开发过程中,根据具体环境和需求,可能需要进行一些额外的调整。
在使用JFreeChart库生成报表时,可能会遇到中文字符出现乱码的问题,这通常是由于字体设置不正确导致的。JFreeChart是一个强大的Java库,用于创建各种类型的图表,包括柱状图、饼图、时序图和折线图等。在处理中文...
这个特定的版本,被称为“JFreeChart无中文乱码版本”,特别优化了解决在处理中文字符时可能出现的乱码问题,使得在中文环境下使用JFreeChart变得更加友好。 JFreeChart支持多种类型的图表,包括但不限于柱状图、...
因此,针对JFreeChart中的中文乱码问题,本文将汇总并整理一系列有效的解决方案。 #### JFreeChart简介 JFreeChart是一款开源Java图表库,它提供了丰富的API来创建高质量的图表。JFreeChart支持多种类型的图表,...
标题"又见乱码——CentOS下JFreeChart生成图片的中文乱码"所指出的问题,是开发者在使用JFreeChart库在CentOS操作系统上生成包含中文字符的图表时遇到的典型问题。JFreeChart是一个强大的Java库,用于生成高质量的...
在使用Java的JFreeChart库绘制包含中文字符的图表...通过以上方法,可以有效地解决jfreechart在显示中文时出现的乱码问题。在实际开发中,根据具体需求和环境进行适当调整,确保中文字符在图表中得到清晰、正确的显示。
通过以上分析,我们可以看到,理解和使用JFreeChart源码不仅可以解决在Linux环境下中文乱码的问题,还能帮助我们更好地控制和定制图表的显示效果。对于需要在Java项目中展示数据或者创建复杂图表的开发者来说,深入...
本工程例子展示了如何利用JFreeChart创建包含中文内容的图表,并解决中文乱码问题以及饼图中显示百分比的问题。 ### 一、中文乱码处理 在Java程序中,处理中文字符时常常会遇到乱码问题。这通常是由于字符编码设置...
iReport JFreeChart 图表乱码问题解决方案 在使用 iReport 和 JFreeChart 生成报表时,可能会遇到图表中文乱码的问题, especially on Linux systems. 这篇文章将详细介绍这个问题的解决方案。 问题描述 当我们...
JFreeChart是一款强大的Java图表库,它允许开发者创建多种类型的图表,...如果你遇到的特定问题仍未解决,可以搜索相关的解决方案,或者参考社区中的帖子,如文中提到的博客文章,那里通常会汇总各种场景下的解决方案。