我正在显示条形图,并试图让条形图上方的标签以正确的语言环境显示(它们是浮动的)。我在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>