边距

时间:2016-02-16 09:12:19

标签: jasper-reports bar-chart

我正在使用Jaspersoft Studio创建包含图表的报告文件。

当我使用条形图并尝试显示条形值标签时,这些标签会被边距覆盖。在我看来,这看起来像一个错误,有没有办法正确显示标签?

为了更好地说明问题,您可以在图片上看到问题,并在红色中找到预期值。

enter image description here

修改

以下是我自定义条形图聊天的进度。到目前为止,我可以做出一些改变,但我仍然坚持最重要的一个。

enter image description here

我尝试使用巨大的边距值而没有任何视觉效果。

    rangeAxis.setUpperMargin(200);
    rangeAxis.setLowerMargin(200);

我也玩过边界。在这种情况下,我可以看到整个标签,但问题是值不会停在100(这不是一个有效的解决方案)。

我发现了边缘被完全忽略的原因:

  

public void setUpperMargin(double margin)   设置轴的上边距(作为轴范围的百分比),并将AxisChangeEvent发送给所有已注册的侦听器。 仅在自动计算轴范围时添加此边距 - 如果手动设置轴范围,则忽略边距。

但是如果我删除了边距,则边界将从0-125自动计算,而不是范围。

像往常一样,欢迎提出任何建议。

为了更好地理解,您可以从我的GitHub存储库下载示例代码。

GitHub:https://github.com/MichaelKnight/jaspertest.git

1 个答案:

答案 0 :(得分:1)

jasper报告中的图表由库生成。在您的情况下,您可以:

1)设置范围轴上边距以为值标签提供更多空间(请参阅jfreechart BarChartDemo5)。

2)在条形图内绘制标签(参见jfreechart BarChartDemo7)编辑后如果需要固定轴的上限值,则需要使用此值,因此如果上限等于最大条形值,则标签没有剩余空间< / em>的

要在jasper报告中自定义条形图,请创建一个扩展JRChartCustomizer的自定义程序类(MyChartCustomizer)。这将揭示:

public void customize(JFreeChart chart, ChartComponent chartComponent)
{
  //Simple example of increasing upper margin on range axis, to print label
  //inside of bar see jfreechart BarChartDemo7
  CategoryPlot plot = (CategoryPlot) chart.getPlot();
  NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  rangeAxis.setUpperMargin(0.20); //Increase or decrease to change upper margin in percentages (0 --> 1.0)
  rangeAxis.setAutoRange(true); //make sure that fixed range is not set
}

将类添加到classpath并在jrxml中设置customizerClass属性

<barChart>
    <chart customizerClass="my.package.MyChartCustomizer">
   ....
    </chart>
   ...
</barChart>