如何在 CategoryPlot 图表上格式化为两位小数

How to format to two decimal places on CategoryPlot chart

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

我的代码(定制程序 class):

       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。

使用 ArgumentIndex{3},看到 here, and supply a separate percentFormatter. Using v.1.5.3, I added the following to 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);

我使用的是 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://whosebug.com/users/230513/trashgod) 的帮助,我必须解决您的代码并在以前版本的 JFreeChart 上显示结果。

链接:

CategoryPlot - setRenderer

AbstractCategoryItemLabelGenerator