1

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

基本上在我的数据集中我有 3 个字段:

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

我只想在 PrintValue=true 时打印标签中的值

4

1 回答 1

0

一种解决方案是覆盖 JRDefaultScriptlet 在 scriptlet 类中实现的方法之一,然后以您希望的任何方式设置“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);
    }
    

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

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

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

于 2012-09-27T16:07:39.090 回答