2016-04-03 49 views
2

我正在显示一个条形图并试图让正确的语言环境(它们是浮动)显示在酒吧上方的标签。我正在开发JasperSoft Studio 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##-)")会导致应用正确的语言环境。在条形图设置中,没有办法以相同的方式指定模式,这就是为什么我试图在代码中这样做。

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

+0

我看到我可以使用'NumberFormat.getInstance($ P {REPORT_LOCALE})。format($ F {小时})',但这并不能让我设定模式,而且远非理想。 –

+0

您可以使用$ P {REPORT_FORMAT_FACTORY} .createNumberFormat(“#,## 0.0 ##;(#,## 0.0 ## - )”,$ P {REPORT_LOCALE})。格式($ F {Hours}) 这将在每次调用时创建一个新的格式化程序,从性能角度来看这显然不理想。 – dada67

回答

2

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

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

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

Locale.setDefault(Locale.US); 

看到Setting java locale settings其他方法如启动时传递参数。

如果你只想要更改标签的Locale在图表中,你需要为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); 
    } 
} 

创建JRChartCustomizer

例子在JRXML

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

确实存在一个bug,修复在https://sourceforge.net/p/jasperreports/code/ci/8387491cbd8077639cfc8869953664af8ccc4da4/ – dada67

+0

data67谢谢。那么现在如何在定制器中获取语言环境? *** \t公共类AssetsChartMod实现JRChartCustomizer {**** \t公共无效定制(JFreeChart图表,JRChart jasperChart){ – DavidDunham

相关问题