2017-08-18 8 views
1

私は、カテゴリCRANE_NUMBERの文字列値を持つ棒グラフを設計しました。値式REMAINING_TIMEjava.util.Dateです。 棒グラフ値式の時間(HH:mm)の表示方法は?

Data

私はレポートを実行

は、私は以下のエラーを得ました。

Grave: java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.Number 
    at net.sf.jasperreports.charts.fill.JRFillCategorySeries.evaluate(JRFillCategorySeries.java:141) 
    at net.sf.jasperreports.charts.fill.JRFillCategoryDataset.customEvaluate(JRFillCategoryDataset.java:110) 
    at net.sf.jasperreports.engine.fill.JRFillElementDataset.evaluate(JRFillElementDataset.java:172) 
    at net.sf.jasperreports.engine.fill.JRCalculator.calculateVariables(JRCalculator.java:187) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:735) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:255) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:115) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:582) 
    at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:414) 
    at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:121) 
    at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:667) 
    at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:648) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:970) 

それはy軸上に棒グラフで残り時間HH:mmを表示するpossibileですか?レンジ軸上HH:mmで棒グラフを作成するには

答えて

1

、私はJRChartCustomizer

を使用することになり、私はjasper-が使用するチャートをレンダラに、ライブラリをこのチャートのカスタマイザーを使用して達成することができる方法の完全な例を示しますレポートはです。

JRChartCustomizer

public class ChartHHmmCustomizer implements JRChartCustomizer { 

    @Override 
    public void customize(JFreeChart jfchart, JRChart jrchart) { 

     //Get the category plot 
     CategoryPlot plot = (CategoryPlot) jfchart.getPlot(); 

     //Crete a date axis 
     DateAxis yAxis = new DateAxis(); 
     //Override the date format 
     yAxis.setDateFormatOverride(new SimpleDateFormat("HH:mm")); 
     //Customize tick unit 
     yAxis.setTickUnit(new DateTickUnit(DateTickUnitType.HOUR, 1)); 
     //Set it to the range axis 
     plot.setRangeAxis(yAxis); 

     //adding a customize item label renderer to view the valus on the 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); 
    } 
} 

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> 

注:Iコンポーネントをグラフ化しcustomizerClass="my.package.ChartHHmmCustomizer"を追加しvalueExpressionとしてIが$F{RemaningTime}.getTime()を設定すること、したがって時間(ミリ秒) (番号)

一部のデータ

+-------------+--------------+ 
| CraneNumber | RemaningTime | 
+-------------+--------------+ 
| Crane1  | 04:20  | 
| Crane2  | 02:13  | 
| Crane3  | 06:31  | 
+-------------+--------------+ 

出力

barchart

+1

この答えは完璧です。それは魅力@Petterのように動作します。 – scalp007

関連する問題