【问题标题】:How to format to two decimal places on CategoryPlot chart如何在 CategoryPlot 图表上格式化为两位小数
【发布时间】:2021-08-30 15:05:29
【问题描述】:

我正在尝试将我的报告格式化为通过我的 JRXML 报告仅显示 2 个小数位和百分比,但即使使用类定制器,它也无法正常工作,并且当它显示在 PDF 文件上时。

我的代码(定制器类):

       import net.sf.jasperreports.engine.JRChart;
       import net.sf.jasperreports.engine.JRChartCustomizer;
       import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
       import org.jfree.chart.plot.CategoryPlot;
       import org.jfree.chart.renderer.category.BarRenderer;

       public void customize(JFreeChart chart, JRChart jasperChart){
        CategoryPlot barPlot = (CategoryPlot) chart.getPlot();
        BarRenderer renderer = (BarRenderer) barPlot.getRenderer();

        NumberFormat formatter = new DecimalFormat("#0.00%");
        formatter.setMinimumFractionDigits(2);
        StandardCategoryItemLabelGenerator scilg2 = new StandardCategoryItemLabelGenerator("{0} {2}", formatter);
        renderer.setItemLabelGenerator(scilg2);
       }

我已经在每个论坛上搜索过,但答案都没有,大多数都应用于饼图,但我的情况不是这样。

PS:我使用的是 JFreeChart 1.0.0 版本和 iReport 1.2.8。

【问题讨论】:

  • @AlexK,在具有相同报告的另一个图表(饼图)上,它正确返回。但是当这些相同的变量出现在 CategoryPlot 图表上时,就会发生这种情况。
  • 最好贴小jrxml和一些测试数据(例如csv文件)来重现问题
  • @trashgod,我要测试一下stackoverflow.com/questions/53963201/… 的帖子,看看结果如何。

标签: jasper-reports bar-chart jfreechart


【解决方案1】:

使用ArgumentIndex{3},见here,并提供单独的percentFormatter。使用 v.1.5.3,我将以下内容添加到 BarChartDemo1 以获取显示的图像:

plot.setOrientation(PlotOrientation.HORIZONTAL);
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMinimumFractionDigits(2);
renderer.setDefaultItemLabelGenerator(
    new StandardCategoryItemLabelGenerator(
        "{0} {1} {2} {3}", NumberFormat.getInstance(), percent));
renderer.setDefaultItemLabelsVisible(true);

【讨论】:

  • 感谢您的帮助@trashgod,我尝试了代码,它说“方法 setDefaultItemLabelGenerator(StandardCategoryItemLabelGenerator) 对于 BarRenderer 类型未定义”并且在 StandardCategoryItemLabelGenerator 上他不允许我添加三个参数,只有二,我可以添加 NumberFormat.getInstance() 或百分比。有什么办法可以解决这个问题吗?
  • 您使用的是以前的版本;我会 migrated 到 v1.5.3;试试setBase…;不知道什么时候添加的四参数构造函数。
  • 他让我使用 setBase 并在 StandardCategoryItemLabelGenerator 上添加 ArgumentIndex 和百分比,而无需在方法内使用 NumberFormat.getInstance()。我将尝试这种方式,看看它是否有效并稍后返回结果:)
  • 它没有用 :(,但感谢您的帮助。它保持与以前相同的结果与长数字,我不知道为什么在 CategoryPlot 上不起作用和在 Pie plot确实如此。
  • 很抱歉听到这个消息;我知道它适用于 v1.5.3,如上所示。
【解决方案2】:

我正在使用 JFreeChart 1.0.0 版本和 iReport 1.2.8。

所以我终于能够使用下面的代码来格式化数字了——发布这样如果有人最终遇到和我一样的问题,他们可以纠正它。

NumberFormat formatter = new DecimalFormat("#0.00'%'");
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
StandardCategoryItemLabelGenerator base = new StandardCategoryItemLabelGenerator("{2}",formatter);
renderer.setBaseItemLabelGenerator(base);
barPlot.setRenderer(renderer);

您必须使用 ArgumentIndex 值 {2},然后您需要使用方法 setRenderer() 向所有注册的侦听器发送更改事件。

感谢@trashgod (https://stackoverflow.com/users/230513/trashgod) 的帮助,我必须解决您的代码并在以前版本的 JFreeChart 上显示结果。

链接:

CategoryPlot - setRenderer

AbstractCategoryItemLabelGenerator

【讨论】:

  • @trashgod 已编辑 :)
  • 啊,这需要我back...
猜你喜欢
  • 2022-09-26
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 2021-09-03
相关资源
最近更新 更多