根据JasperReport中的double值更改BackGround颜色

时间:2014-07-15 11:04:12

标签: jasper-reports

我正在使用Jasper Report 4.5.1,我有一个交叉表报告,我需要根据单元格中的值更改背景颜色,但我能够更改前景色而不是背景色

以下工作正常

<style name="Crosstab Data Text">
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{value}.doubleValue()==1.0d]]></conditionExpression>
            <style forecolor="#66FF66"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{value}.doubleValue()>0.5d && $F{value}.doubleValue()=<1.0d]]></conditionExpression>
            <style forecolor="#66FF66"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{value}.doubleValue()>0.0d && $F{value}.doubleValue()<0.5d]]></conditionExpression>
            <style forecolor="#FFFF33"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{value}.doubleValue()>-0.5d && $F{value}.doubleValue()<0.0d]]></conditionExpression>
            <style forecolor="#FF9933"/>
        </conditionalStyle>
        <conditionalStyle>
            <conditionExpression><![CDATA[$F{value}.doubleValue()>=-1.0d && $F{value}.doubleValue()<-0.5d]]></conditionExpression>
            <style forecolor="#FF0000"/>
        </conditionalStyle>
</style>

但是,当我尝试以下操作时,它不起作用

<style name="Crosstab Data Text" hAlign="Center">
    <conditionalStyle>
        <conditionExpression><![CDATA[$V{value}.doubleValue()>0.5d && $V{value}.doubleValue()<1.0d]]></conditionExpression>
        <style mode="Opaque" backcolor="#00FF00" fill="Solid"/>
    </conditionalStyle>
    <conditionalStyle>
        <conditionExpression><![CDATA[$V{value}.doubleValue()>0.0d && $V{value}.doubleValue()<0.5d]]></conditionExpression>
        <style mode="Opaque" backcolor="#0000FF" fill="Solid"/>
    </conditionalStyle>
    <conditionalStyle>
        <conditionExpression><![CDATA[$V{value}.doubleValue()>-0.5d && $V{value}.doubleValue()<0.0d]]></conditionExpression>
        <style mode="Opaque" backcolor="#FF00FF" fill="Solid"/>
    </conditionalStyle>
    <conditionalStyle>
        <conditionExpression><![CDATA[$V{value}.doubleValue()>=-1.0d && $V{value}.doubleValue()<-0.5d]]></conditionExpression>
        <style mode="Opaque" backcolor="#FF0000" fill="Solid"/>
    </conditionalStyle>
</style>

我尝试使用'backcolor =“#FF0000”fill =“Solid”'或'mode =“不透明”backcolor =“#FF0000”'仍然无法正常工作......不确定此功能是否不受支持..或者我做错了什么?

这里问了类似的问题 Change text field data color (Foreground color) based on condition in JasperReports

<crosstabCell width="58" height="26">
                    <cellContents>
                        <textField pattern="#0.##" isBlankWhenNull="true">
                            <reportElement style="Crosstab Data Text" mode="Transparent" x="0" y="0" width="58" height="26"/>
                            <textElement verticalAlignment="Middle">
                                <font fontName="Calibri" size="9"/>
                            </textElement>
                            <textFieldExpression><![CDATA[$V{value}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
                <crosstabCell height="25" rowTotalGroup="text1">
                    <cellContents backcolor="#FFBFBF" mode="Opaque">
                        <textField>
                            <reportElement style="Crosstab Data Text" x="0" y="0" width="50" height="25"/>
                            <textElement/>
                            <textFieldExpression><![CDATA[$V{value}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
                <crosstabCell width="50" columnTotalGroup="text2">
                    <cellContents backcolor="#FFBFBF" mode="Opaque">
                        <textField>
                            <reportElement style="Crosstab Data Text" x="0" y="0" width="50" height="25"/>
                            <textElement/>
                            <textFieldExpression><![CDATA[$V{value}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
                <crosstabCell rowTotalGroup="text1" columnTotalGroup="text2">
                    <cellContents backcolor="#FFBFBF" mode="Opaque">
                        <textField>
                            <reportElement style="Crosstab Data Text" x="0" y="0" width="50" height="25"/>
                            <textElement/>
                            <textFieldExpression><![CDATA[$V{value}]]></textFieldExpression>
                        </textField>
                    </cellContents>
                </crosstabCell>
            </crosstab>

2 个答案:

答案 0 :(得分:2)

发现问题已更改

 <reportElement style="Crosstab Data Text" mode="Transparent" x="0" y="0" width="58" height="26"/>

 <reportElement style="Crosstab Data Text"  x="0" y="0" width="58" height="26"/>

它运作良好

答案 1 :(得分:1)

我认为问题在于条件的顺序,风格中的所有条件应该按照我的风格顺序我首先检查收入&gt;然后> 100> 75,&gt; 25和&gt; 0,在这种情况下,如果第一个条件为真,那么它将不会进入下一个条件,如果第一个条件不为真,那么它将进入第二个条件,依此类推。

只需检查您的风格中的条件顺序。

<style name="s_total_revenue"> <conditionalStyle> <conditionExpression><![CDATA[($F{ACT_REVENUE}/$F{TARGET_REVENUE})*100 >100]]></conditionExpression> <style mode="Opaque" forecolor="#FFFFFF" backcolor="#006633" fill="Solid"/> </conditionalStyle> <conditionalStyle> <conditionExpression><![CDATA[($F{ACT_REVENUE}/$F{TARGET_REVENUE})*100 > 75]]></conditionExpression> <style mode="Transparent" forecolor="#000000" backcolor="#00FF33" fill="Solid"/> </conditionalStyle> <conditionalStyle> <conditionExpression><![CDATA[($F{ACT_REVENUE}/$F{TARGET_REVENUE})*100 > 25]]></conditionExpression> <style mode="Opaque" forecolor="#FFFFFF" backcolor="#FFFF00" fill="Solid"/> </conditionalStyle> <conditionalStyle> <conditionExpression><![CDATA[($F{ACT_REVENUE}/$F{TARGET_REVENUE})*100 >0]]></conditionExpression> <style mode="Opaque" forecolor="#FFFFFF" backcolor="#990000" fill="Solid"/> </conditionalStyle> </style>