如何在柱状图中为标签设置区域设置?

3

我正在展示一张柱状图,试图让标签以正确的区域设置(它们是浮点数)显示在条形上方。我正在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##-)")会应用正确的区域设置。在柱状图设置中,没有办法以同样的方式指定模式,这就是为什么我试图在代码中这样做的原因。

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


我看到可以使用NumberFormat.getInstance($P{REPORT_LOCALE}).format($F{Hours}),但这种方法不能设置模式,而且远非理想选择。 - undefined
您可以使用$P{REPORT_FORMAT_FACTORY}.createNumberFormat("#,##0.0##;(#,##0.0##-)", $P{REPORT_LOCALE}).format($F{Hours})。这会在每次调用时创建一个全新的格式化程序,从性能角度来看显然不是理想的选择。 - undefined
1个回答

2

是的,我已经验证过了,Jasper报告在生成图表时没有使用$P{REPORT_LOCALE},我几乎认为这是一个错误。他们使用生成图表的方法不支持传递Locale,但他们可以自动生成具有正确Locale的自定义程序。

要在图表标签中获取所需的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);
    }
}

In jrxml

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

1
确实存在一个错误,已在https://sourceforge.net/p/jasperreports/code/ci/8387491cbd8077639cfc8869953664af8ccc4da4/上修复。 - undefined
data67谢谢。那么我现在如何在自定义程序中获取区域设置呢?***public class AssetsChartMod implements JRChartCustomizer {****public void customize(JFreeChart chart, JRChart jasperChart) { - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接