代码之家  ›  专栏  ›  技术社区  ›  Adrian Pronk

通过Jasper报告向JFreechart传递区域设置详细信息

  •  1
  • Adrian Pronk  · 技术社区  · 15 年前

    我将国际化添加到TapestryWeb应用程序中,该应用程序使用Jasper报表生成普通的表格报表,还通过JFreeChart生成图表和图形。

    使用Jasper REPORT_LOCALE参数,我可以设置Jasper报表的LOCALE,这对于表格报表非常有用,但是对于JFreeChart报表却不起作用。

    轴刻度标签出现在默认区域,这样,如果我在做一个时间序列,我会以错误的语言出现月份名称。我知道如何处理这个问题的唯一方法是更改JVM的默认语言环境,我对此并不满意。

    是否有人知道有什么方法可以将JFreeChart配置为使用特定的区域设置,以便Jasper调用它时使用该区域设置?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Charles O.    15 年前

    我刚刚遇到这个问题,并能够通过创建一个图表自定义类来解决这个问题。

    在my.jrxml中:

    <chart evaluationTime="Report" customizerClass="foo.Customizer" renderType="image">
    

    我的自定义类如下所示:

    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)));
        }
    
    }
    

    是的,那条代码做了很多假设。但是我总是在运行报表之前显式地设置区域设置,所以我知道这不是空的。我知道我的特定图表有一个分类图和一个数字轴,所以我不做检查的例子。但你明白了。