gpt4 book ai didi

java - 通过 Jasper-Reports 将区域设置详细信息传递给 JFreechart

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:23 24 4
gpt4 key购买 nike

我正在将国际化添加到 Tapestry Web 应用程序中,该应用程序使用 Jasper Reports 生成正常的表格报告以及通过 JFreeChart 生成图表和图形。

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

轴刻度标签以默认语言环境显示,因此如果我正在执行时间序列,我会得到以错误语言显示的月份名称。我想出解决这个问题的唯一方法是更改​​ JVM 默认区域设置,但我对此并不满意。

有谁知道是否有某种方法可以配置 JFreeChart 以使用特定的区域设置,以便当 Jasper 调用它时,它使用该区域设置?

最佳答案

我刚刚遇到了这个问题,并且能够通过创建图表定制器类来解决它。

在我的 .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)));
}

}

是的,该代码做了很多假设。但我总是在运行报告之前明确设置区域设置,所以我知道它不为空。我知道我的特定图表有一个 CategoryPlot 和一个 NumberAxis,所以我不进行 instanceof 检查。但你明白了。

查尔斯

关于java - 通过 Jasper-Reports 将区域设置详细信息传递给 JFreechart,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1588196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com