首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Jasper-Reports向JFreechart传递区域设置详细信息

通过Jasper-Reports向JFreechart传递区域设置详细信息
EN

Stack Overflow用户
提问于 2009-10-19 11:36:35
回答 1查看 5.6K关注 0票数 1

我正在将国际化添加到一个Tapestry web-app中,它使用Jasper报告来生成正常的表格报告,也可以通过JFreeChart生成图表和图形。

使用Jasper REPORT_LOCALE参数,我可以设置Jasper报告的区域设置,这对表格报告很有效,但不适用于JFreeChart报告。

Axis tick标签是以默认区域设置出现的,所以如果我在做时间序列,我会得到错误语言的月份名称。我想出了解决这个问题的唯一方法就是更改JVM的默认语言环境,我对此并不满意。

有没有人知道有没有办法将JFreeChart配置为使用特定的语言环境,这样当Jasper调用它时,它就会使用该语言环境?

EN

回答 1

Stack Overflow用户

发布于 2010-01-23 09:57:54

我刚刚遇到了这个问题,并且能够通过创建一个Chart Customizer类来绕过它。

在我的.jrxml中:

代码语言:javascript
复制
<chart evaluationTime="Report" customizerClass="foo.Customizer" renderType="image">

然后,我的Customizer类如下所示:

代码语言:javascript
复制
package foo;

import java.text.NumberFormat;
import java.util.Locale;

import net.sf.jasperreports.engine.JRAbstractChartCustomizer;
import net.sf.jasperreports.engine.JRChart;
import net.sf.jasperreports.engine.JRParameter;

import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;

public class Customizer extends JRAbstractChartCustomizer {

    public void customize(JFreeChart chart, JRChart jasperChart) {
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setNumberFormatOverride(
          NumberFormat.getInstance((Locale)
          getParameterValue(JRParameter.REPORT_LOCALE)));
    }

}

是的,这段代码做了很多假设。但是我总是在运行报告之前显式地设置locale,所以我知道它不是空的。而且我知道我的特定图表有一个CategoryPlot和一个NumberAxis,所以我不做instanceof检查。但你明白我的意思。

查尔斯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1588196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档