JasperReports根据类别值以外的值自定义系列标签

时间:2012-06-29 22:17:01

标签: jasper-reports jfreechart

我有一个带有折线图的JasperReport,我需要在其上显示标签,但我希望它们有条件地显示每个数据点。我已经创建了自定义程序类来实际显示值,但是我想使用与值字段不同的字段来决定它是否应该显示。

基本上在我的DataSet中我有3个字段:

Date: (Category Axis)
Value: (Value Axis)
PrintValue: Boolean field

我想仅在PrintValue = true

时打印标签中的值

1 个答案:

答案 0 :(得分:0)

一种解决方案是在Scriptlet类中覆盖JRDefaultScriptlet实现的方法之一,然后以您想要的任何方式设置“PrintValue”的值。然后在图表数据集中,您应该能够将$V{PRINTVALUE}作为操作数引用。

我将假设您使用iReport进行报告设计。

  1. 在iReport中打开报告,然后点击报告名称(报告检查器中的最顶层节点)

  2. 将Scriplet类设置为包名和类,例如org.company.scriptlets.MyChartClass

  3. 在iReport中声明您的报告变量。在这种情况下,“PRINTVALUE”将是变量名称。

  4. 创建一个覆盖scriplet方法的java类,例如beforeDetailEval,例如:

    @Override
    public void beforeDetailEval() throws JRScriptletException {
            super.beforeDetailEval();
            ...
            this.setVariableValue("PRINTVALUE", true);
    }
    

    由于您希望为每个刻度标记有条件地显示类别标签,因此您可能需要使用键/值对的映射。 key是类别标签,“PRINTVALUE”的值为true / false。注意我没有在上面的示例代码中说明这一点,但它完全可能。只需将报告变量声明为地图,例如HashMap<String, Boolean> hm

  5. 您需要将新的scriplet类添加到iReport中的Classpath。

  6. 希望这有助于或至少让你开始。