【问题标题】:Barchart Bar width is very thin in jasper条形图条宽在碧玉中很细
【发布时间】:2015-11-07 08:30:39
【问题描述】:

我在 ireport 3.0 中创建了一个条形图,问题是条形非常细。当我尝试通过自定义 r 类增加条形宽度时,它不会反映条形大小的任何变化,即宽度与原来相同。那么如何增加条形图条的宽度呢?为了您的理解,我附上了图片副本。

条宽如图所示。

【问题讨论】:

  • 没有图。请检查您的问题的格式。 (点击左侧问题下方的“编辑”按钮)
  • 欢迎来到 Stack Overflow!我编辑了您的问题以正确缩进您的文本。缩进 4 个空格用于代码示例 - 有关格式的更多信息,请参阅编辑帮助。祝你好运!

标签: jasper-reports bar-chart jfreechart


【解决方案1】:

我也遇到过同样的问题。经过长时间的搜索,我找到了一些解决我的问题的解决方案。 jasper 报告条形图的条形宽度取决于图表的高度和宽度。由于 jasper 在后端使用 JFreechart,因此自定义类可以进行许多修改。为了增加条形图的宽度,您需要一个自定义类,然后将其添加到您的条形图 jrxml 中,如下所示

public class JasperBarChartCustomization implements JRChartCustomizer {
@Override
public void customize(JFreeChart chart, JRChart jasperChart) {
    CategoryPlot catPlot = (CategoryPlot) chart.getPlot();
    BarRenderer renderer = (BarRenderer) catPlot.getRenderer();
    renderer.setMaximumBarWidth(.08);//for max width//
    renderer.setItemMargin(-2);//as much margin decrease that much bar width increase//
    //for adding value ob bar//
    renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER));
    renderer.setBaseItemLabelPaint(Color.WHITE);
    renderer.setBaseItemLabelFont(new Font("fontname", Font.PLAIN, 6));
    //for remove legend background color and box border//
    if (chart.getLegend() != null) {
        chart.getLegend().setBorder(0.0, 0.0, 0.0, 0.0);
        LegendTitle legend = chart.getLegend();
        legend.setBorder(0, 0, 0, 0);
        legend.setFrame(BlockBorder.NONE);
    }
  }
}

现在从上面的类创建一个 jar 并在你的 jasper 项目的类路径中使用该 jar

如果您的 jasper 在 java 应用程序中运行,那么您可以直接使用该类而无需制作 jar。在您的代码库中创建自定义类

【讨论】: