如何将区域设置设置为条形图中的标签?

时间:2016-04-03 08:21:00

标签: jasper-reports bar-chart jfreechart

我正在显示一个条形图,并尝试将标签显示在正确的区域设置上方(它们是浮点数)。我正在开发JasperSoft Studio 6.2.0。我将全局和/或报告(执行时)区域设置设置为en_US,但标签仍显示在我的Windows区域设置(nl_NL)中。然后我将标签表达式设置为

new DecimalFormat("#,##0.0##;(#,##0.0##-)").format($F{Hours})

但它仍然在Windows语言环境中。只有当我明确地将标签表达式设置为en_US locale:

NumberFormat.getInstance(Locale.US).format($F{Hours})

我能得到正确的结果吗?在其他地方(TextFields),设置格式模式(例如,设置为"#,##0.0##;(#,##0.0##-)")会导致应用正确的区域设置。在条形图设置中,无法以相同的方式指定模式,这就是我尝试在代码中执行此操作的原因。

这是一个错误还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

是的我已经验证,jasper报告在生成图表时不使用其$P{REPORT_LOCALE},我几乎认为它是一个错误。他们使用metods生成不支持传递Locale的图表,但他们可以自动生成具有正确语言环境的自定义程序。

要在图表标签中获得所需的Locale您的选项。

设置整个应用程序的默认语言环境

Locale.setDefault(Locale.US);

在启动时,请参阅Setting java locale settings了解其他方法作为传递参数。

如果您只想更改图表中标签的Locale,则需要创建JRChartCustomizer

BarChart的示例

public class MyLocaleCustomizer implements JRChartCustomizer{
    @Override
    public void customize(JFreeChart chart, JRChart jrchart) {
        CategoryPlot plot = (CategoryPlot) chart.getPlot();
        StandardCategoryItemLabelGenerator lg = new StandardCategoryItemLabelGenerator("{2}",NumberFormat.getNumberInstance(Locale.US));
        plot.getRenderer().setBaseItemLabelGenerator(lg);
    }
}

在jrxml

<barChart>
    <chart customizerClass="MyLocaleCustomizer">
        ..
    </chart>
    ..
</barChart>