【问题标题】:How to set Locale to labels in Bar Chart?如何将区域设置设置为条形图中的标签?
【发布时间】:2016-07-22 20:14:18
【问题描述】:

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

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

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

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

我得到正确的结果吗?在其他地方(TextFields),设置格式模式(例如"#,##0.0##;(#,##0.0##-)")会导致应用正确的语言环境。在条形图设置中,无法以相同的方式指定模式,这就是我尝试在代码中执行此操作的原因。

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

【问题讨论】:

  • 我知道我可以使用NumberFormat.getInstance($P{REPORT_LOCALE}).format($F{Hours}),但这并不能让我设置模式,而且还远非理想。
  • 你可以使用 $P{REPORT_FORMAT_FACTORY}.createNumberFormat("#,##0.0##;(#,##0.0##-)", $P{REPORT_LOCALE}).format($ F{Hours}) 这将在每次调用时创建一个新的格式化程序,从性能的角度来看这显然不是理想的。

标签: jasper-reports bar-chart jfreechart


【解决方案1】:

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

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

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

Locale.setDefault(Locale.US);

请参阅Setting java locale settings 了解启动时作为传递参数的其他方法。

如果您只想更改图表中标签的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>

【讨论】:

  • 确实是一个错误,已修复在sourceforge.net/p/jasperreports/code/ci/…
  • data67 谢谢。那么我现在如何在定制器中获取语言环境? *** 公共类 AssetsChartMod 实现 JRChartCustomizer { **** public void customize(JFreeChart chart, JRChart jasperChart) {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
相关资源
最近更新 更多