【问题标题】:Custom value labels on top of bars with Jasper Report bar charts使用 Jasper 报告条形图在条形顶部自定义值标签
【发布时间】:2021-07-12 10:10:28
【问题描述】:

我在 Jasper Studio 中定义了一个条形图,它正在生成这种结果:

条形顶部的值重叠。我想要:

  • 减小标签的文本大小并将它们限制为两位小数。
  • 更改标签的垂直位置以避免重叠。

我不确定,但我认为 Jasper Studio 不允许对其进行任何配置。

我已经看到在代码JRChartCustomizer 中实现,但我不知道如何修改标签的文本或位置。

编辑

我试过这样:

    public void customize(JFreeChart fc, JRChart jrc) {
    
    CategoryPlot catPlot = fc.getCategoryPlot();
    
    if (jrc.getDataset() instanceof JRFillChartDataset) {
        JRFillChartDataset jrFillChartDataset = (JRFillChartDataset) jrc.getDataset();

        CategoryLabelGenerator categoryLabelGenerator = (CategoryLabelGenerator) jrFillChartDataset.getLabelGenerator();
        categoryLabelGenerator.getNumberFormat().setMaximumFractionDigits(1);

但是没有用,因为 getLabelGenerator() 在每次调用时都会创建一个新的 CategoryLabelGenerator,因此为其 NumberFormat 实例设置值是没有意义的。

【问题讨论】:

    标签: charts jasper-reports jfreechart


    【解决方案1】:

    最后我得到了这样的结果:

    @Override
    public void customize(JFreeChart fc, JRChart jrc) {
        
        CategoryPlot catPlot = fc.getCategoryPlot();
    
        
        final CategoryItemRenderer renderer = catPlot.getRenderer();
        Font font = renderer.getBaseItemLabelFont();
        Font font2 = font.deriveFont(3f);
        renderer.setBaseItemLabelFont(font2);
        
        renderer.setBaseItemLabelGenerator(new CategoryLabelGenerator(null) {
            private static final long serialVersionUID = 549073036018846176L;
    
            @Override
            public String generateLabel(CategoryDataset dataset, int row, int column) {
                Number value = dataset.getValue(row, column);
                
                if (value != null) {
                    
                    NumberFormat nf = NumberFormat.getPercentInstance();
                    nf.setMinimumIntegerDigits(1);
                    nf.setMaximumFractionDigits(2);
                    
                    return nf.format(value.doubleValue() / 100);
                }
                
                return null;
            }
        });
    }
    

    【讨论】:

    • 或者,使用 ArgumentIndex {3},见 here
    猜你喜欢
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多