如何将区域设置设置为条形图中的标签?
我正在显示一个条形图并试图让正确的语言环境(它们是浮动)显示在酒吧上方的标签。我正在开发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##-)"
)会导致应用正确的语言环境。在条形图设置中,没有办法以相同的方式指定模式,这就是为什么我试图在代码中这样做。
这是一个错误还是我错过了什么?
是的,我确认了,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);
}
}
例子在JRXML
<barChart>
<chart customizerClass="MyLocaleCustomizer">
..
</chart>
..
</barChart>
确实存在一个bug,修复在https://sourceforge.net/p/jasperreports/code/ci/8387491cbd8077639cfc8869953664af8ccc4da4/ – dada67
data67谢谢。那么现在如何在定制器中获取语言环境? *** \t公共类AssetsChartMod实现JRChartCustomizer {**** \t公共无效定制(JFreeChart图表,JRChart jasperChart){ – DavidDunham
我看到我可以使用'NumberFormat.getInstance($ P {REPORT_LOCALE})。format($ F {小时})',但这并不能让我设定模式,而且远非理想。 –
您可以使用$ P {REPORT_FORMAT_FACTORY} .createNumberFormat(“#,## 0.0 ##;(#,## 0.0 ## - )”,$ P {REPORT_LOCALE})。格式($ F {Hours}) 这将在每次调用时创建一个新的格式化程序,从性能角度来看这显然不理想。 – dada67