如何在条形图中为标签设置区域设置



我正在显示条形图,并试图让条形图上方的标签以正确的语言环境显示(它们是浮动的)。我在JasperSoft工作室6.2.0进行开发。我将全局和/或报告(执行时间)区域设置为en_US,但标签仍显示在我的Windows区域设置(nl_NL)中。然后我将标签表达式设置为

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

但它仍然在Windows区域设置中。仅当我将标签表达式显式设置为en_US语言环境时:

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

我得到正确的结果了吗。在其他地方(TextFields),设置格式模式(例如"#,##0.0##;(#,##0.0##-)")会导致应用正确的区域设置。在条形图设置中,没有办法以相同的方式指定模式,这就是为什么我试图在代码中这样做。

这是bug还是我遗漏了什么?

是的,我验证过,jasper报告在生成图表时不使用其$P{REPORT_LOCALE},我几乎认为这是一个错误。他们使用metods来生成不支持传递Locale的图表,但他们可以自动生成具有正确区域设置的自定义程序。

要在图表标签中获得所需的Locale,您可以选择。

设置整个应用程序的默认区域设置

Locale.setDefault(Locale.US);

请参阅将其他方法的java语言环境设置设置为启动时的传递参数。

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

条形图示例

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>

相关内容

  • 没有找到相关文章

最新更新