java - How to show time (HH:mm) in bar chart value expression? -
i have designed bar chart string value in categorie crane_number
, value expression remaining_time
java.util.date
.
when run report, got error below.
grave: java.lang.classcastexception: java.util.date cannot cast java.lang.number @ net.sf.jasperreports.charts.fill.jrfillcategoryseries.evaluate(jrfillcategoryseries.java:141) @ net.sf.jasperreports.charts.fill.jrfillcategorydataset.customevaluate(jrfillcategorydataset.java:110) @ net.sf.jasperreports.engine.fill.jrfillelementdataset.evaluate(jrfillelementdataset.java:172) @ net.sf.jasperreports.engine.fill.jrcalculator.calculatevariables(jrcalculator.java:187) @ net.sf.jasperreports.engine.fill.jrverticalfiller.filldetail(jrverticalfiller.java:735) @ net.sf.jasperreports.engine.fill.jrverticalfiller.fillreportstart(jrverticalfiller.java:255) @ net.sf.jasperreports.engine.fill.jrverticalfiller.fillreport(jrverticalfiller.java:115) @ net.sf.jasperreports.engine.fill.jrbasefiller.fill(jrbasefiller.java:582) @ net.sf.jasperreports.engine.fill.basereportfiller.fill(basereportfiller.java:414) @ net.sf.jasperreports.engine.fill.jrfiller.fill(jrfiller.java:121) @ net.sf.jasperreports.engine.jasperfillmanager.fill(jasperfillmanager.java:667) @ net.sf.jasperreports.engine.jasperfillmanager.fill(jasperfillmanager.java:648) @ net.sf.jasperreports.engine.jasperfillmanager.fillreport(jasperfillmanager.java:970)
is possibile show remaining time hh:mm
in barchart on y-axis?
to create bar chart hh:mm
on range axis, use jrchartcustomizer
i show full example of how can achieved using chart customizer, library renderer charts used jasper-reports jfreechart.
the jrchartcustomizer
public class charthhmmcustomizer implements jrchartcustomizer { @override public void customize(jfreechart jfchart, jrchart jrchart) { //get category plot categoryplot plot = (categoryplot) jfchart.getplot(); //crete date axis dateaxis yaxis = new dateaxis(); //override date format yaxis.setdateformatoverride(new simpledateformat("hh:mm")); //customize tick unit yaxis.settickunit(new datetickunit(datetickunittype.hour, 1)); //set range axis plot.setrangeaxis(yaxis); //adding customize item label renderer view valus on barchart categoryitemrenderer renderer = ((categoryplot) jfchart.getplot()).getrenderer(); renderer.setbaseitemlabelgenerator(new standardcategoryitemlabelgenerator("{2}",new simpledateformat("hh:mm"))); renderer.setbaseitemlabelsvisible(true); itemlabelposition position = new itemlabelposition(itemlabelanchor.outside12, textanchor.top_center); renderer.setbasepositiveitemlabelposition(position); } }
the jrxml
<?xml version="1.0" encoding="utf-8"?> <jasperreport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="timebarchart" pagewidth="595" pageheight="842" columnwidth="555" leftmargin="20" rightmargin="20" topmargin="20" bottommargin="20" uuid="f71aa6b8-70ce-4de9-9e62-f8bd196e40f8"> <querystring> <![cdata[]]> </querystring> <field name="cranenumber" class="java.lang.string"/> <field name="remaningtime" class="java.util.date"/> <columnheader> <band height="20"> <statictext> <reportelement x="0" y="0" width="100" height="20" uuid="af39006a-cd21-46c1-b74f-69fd3c570031"/> <textelement verticalalignment="middle"> <font isbold="true"/> </textelement> <text><![cdata[cranenumber]]></text> </statictext> <statictext> <reportelement x="100" y="0" width="100" height="20" uuid="83918a9e-3cd4-4581-8304-35246f8db5a9"/> <textelement verticalalignment="middle"> <font isbold="true"/> </textelement> <text><![cdata[remaningtime]]></text> </statictext> </band> </columnheader> <detail> <band height="20" splittype="stretch"> <textfield pattern="hh:mm"> <reportelement x="100" y="0" width="100" height="20" uuid="a699d0ea-03fa-4232-8bc3-7b6c72c8e13c"/> <textelement verticalalignment="middle"/> <textfieldexpression><![cdata[$f{remaningtime}]]></textfieldexpression> </textfield> <textfield> <reportelement x="0" y="0" width="100" height="20" uuid="bbb040e5-4958-435a-90eb-b52f231ed5cd"/> <textelement verticalalignment="middle"/> <textfieldexpression><![cdata[$f{cranenumber}]]></textfieldexpression> </textfield> </band> </detail> <summary> <band height="185" splittype="stretch"> <barchart> <chart isshowlegend="false" customizerclass="my.package.charthhmmcustomizer"> <reportelement x="66" y="29" width="356" height="141" uuid="60bdb0d1-8c39-4fdc-98b9-d1c5458cb665"/> <charttitle/> <chartsubtitle/> <chartlegend/> </chart> <categorydataset> <categoryseries> <seriesexpression><![cdata["my cranes"]]></seriesexpression> <categoryexpression><![cdata[$f{cranenumber}]]></categoryexpression> <valueexpression><![cdata[$f{remaningtime}.gettime()]]></valueexpression> </categoryseries> </categorydataset> <barplot> <plot/> <itemlabel/> <categoryaxisformat> <axisformat/> </categoryaxisformat> <valueaxislabelexpression/> <valueaxisformat> <axisformat/> </valueaxisformat> </barplot> </barchart> </band> </summary> </jasperreport>
note: add
customizerclass="my.package.charthhmmcustomizer"
to chart component ,valueexpression
set$f{remaningtime}.gettime()
, hence time in milliseconds (a number)
some data
+-------------+--------------+ | cranenumber | remaningtime | +-------------+--------------+ | crane1 | 04:20 | | crane2 | 02:13 | | crane3 | 06:31 | +-------------+--------------+
output
Comments
Post a Comment