2011-11-10 85 views
5

私はJasperReportsの新しいブランドであり、基本的には自分のやり方をゆっくりと戦っています。私はDB駆動のデータ(いわゆるデータソース)を使って円グラフを塗りたくない状況があります。実行時にJasperFillManagerに渡されるJavaハッシュマップから円グラフを塗りつぶすのに必要なすべての情報を提供したいと思います。JasperReport円グラフの例

これには、円グラフのスライスにラベルを付け、色を設定し、重み/値(スライスのサイズ)を定義するパラメータが含まれます。だから、私のJavaコードの中でいくつかの点で、私のような何か書くことになります

HashMap<String,Object> jrParams = new HashMap<String,Object>(); 

jpParams.put("slice_1_label", "Red Team"); 
jpParams.put("slice_1_color", Color.RED); 
jpParams.put("slice_1_value", 67.0); 
jpParams.put("slice_2_label", "Blue Team"); 
jpParams.put("slice_2_color", Color.BLUE); 
jpParams.put("slice_2_value", 33.0); 

// ... some other code 

JasperFillManager.fillReport(jasperDesign, jrParams); 

を私はここで達成しようとしている目標は、2つのスライスを円グラフを持っているだろう。赤の「赤チーム」スライスはパイの67%を占め、青の「青チーム」スライスは33%上昇しました。

ここで私のハッシュマップとJRXML/JasperDesignの間にドットを接続するのに役立つ必要があります。

は、誰かが私を見る(あるいは単に私を手助けする)ことができるのいずれか、私は私のjrParamハッシュマップは、実行時のパラメータで円グラフを埋める持つために書く必要があるでしょう<pieChart> JRXMLの種類を向けましたか?私は下で最高の試みをしましたが、それを完全に理解することに苦労しています。

<pieChart> 
    <chart isShowLegend="true"> 
     <reportElement x="10" y="10" width="300" height="300"/> 
     <chartTitle> 
      <titleExpression><![CDATA[My First JR Pie Chart]]></titleExpression> 
     </chartTitle> 
    </chart> 
    <pieDataset> 

     <!-- Here is where I believe I need to put my two slices; not sure how --> 

    </pieDataset> 
    <piePlot> 
     <plot backcolor="#8BA870"/> 
     <itemLabel color="#000000"/> 
    </piePlot> 
</pieChart> 

ご協力いただきありがとうございます!

答えて

5

zharvey、

あなたはJasperReportにかなり新しいですので、私はあなたがiReportはDesignerツールを使用している期待しています。 iReportデザイナーが持っているサンプルテンプレートの1つから円グラフを設計し、生成されたJRXMLを調べます。あなたがiReport-> Help-> Samples-> Chartsに行くときに見ることができる非常に簡単なサンプルがあります。

2番目のヒントは、データソースとしてJava BeanまたはPOJOを使用することです)。私は、文字列のラベル、色、および値のマップを作成しているサンプルコードを調べています。インスタンス変数としてこれらの3つのプロパティすべてを持つプレーンな古いJava Beanクラスがあれば、素敵で簡単にはできないでしょうか? JRBeanDataSource経由で簡単にアクセスして使用できるBeanオブジェクトのコレクションを作成できるため、レポートも簡単に作成できます。 私はあなたのコードを少し清潔に保ちやすくすると思います。 よろしく!

+0

メッチコフご返信ありがとうございます。はい、私はiReports(とChartsサンプル)を使用しています。これは私の質問でJRXMLのほとんどを得ています。ほとんどの場合、JRDataSource(この場合はJRBeanDataSource)を使用してレポートデータを入力したいと思います。しかし、私はパラメータの純粋なハッシュマップを使用することが可能かどうか、もしそうならJRXMLがどのように見えるのか疑問に思っています。返信いただきありがとうございます! – IAmYourFaja

+0

また、JRBeanArrayDataSourceを操作するためのJRXMLの記述方法を提供するために編集できれば、私はあなたの答えを受け入れます。私は、唯一の3つのプロパティとして、文字列ラベル、色の色、およびDouble値を持つPieSlice Beanと、それぞれの標準Getter/Setterを持っているとします。私はその後、充填時にこれらのPieSliceの配列(サイズ= 2、元の質問の2つのスライスに対応する)をJasperFillManagerに渡します。 JRXMLは現在どのように見える必要がありますか? – IAmYourFaja

+0

@Zharvey私はコード全体を書くつもりだったが、このすばらしい説明に遭遇した...それを確認してください...ああ、うまくいけば、マップやリストのデータソースでそれを行う方法をあなたに教えてくれます。あなたに多くの質問があるかどうか私に教えてください。よろしく! http://gilbertadjin.wordpress.com/2009/08/09/charting-with-jasper-reports/ – Mechkov

0

このコードが役立つかどうかを確認してください。私はデータソースとしてjavabeanを使用する以下のコードを使用して棒グラフを作成しました。あなたが私のjrmlを通過したいなら、私はそれを提供することもできます。

public class App{ 
    String cname; 
    int mark; 
    public void setCname(String cname){ 
     this.cname = cname; 
    } 
    public void setMark(int mark){ 
     this.mark = mark; 
    } 
    public String getCname(){ 
     return cname; 
    } 
    public int getMark(){ 
     return mark; 
    } 
    public static ArrayList<App> getDetails() { 
     ArrayList<App> clist= new ArrayList<App>(); 
     App c1 = new App(); 
     c1.setCname("English"); 
     c1.setMark(58); 
     clist.add(c1); 
     c1 = new App(); 
     c1.setCname("Social Studies"); 
     c1.setMark(68); 
     clist.add(c1); 
     c1 = new App(); 
     c1.setCname("Culture"); 
     c1.setMark(78); 
     clist.add(c1); 
     c1 = new App(); 
     c1.setCname("Maths"); 
     c1.setMark(78); 
     clist.add(c1); 
     c1 = new App(); 
     c1.setCname("Physics"); 
     c1.setMark(100); 
     clist.add(c1); 
     return(clist); 
    } 

    public static void main(String[] args) { 
     JasperReport jasperReport; 
     JasperPrint jasperPrint; 
     Map<String, Object> param = new HashMap<String, Object>(); 
     try { 
      String sourceFileName = ".jrxml"; 
      jasperReport = JasperCompileManager.compileReport(sourceFileName); 
      jasperPrint = JasperFillManager.fillReport(jasperReport,param,new JRBeanCollectionDataSource(getDetails())); 
      JasperExportManager.exportReportToPdfFile(jasperPrint, ".pdf"); 
     } 
     catch(Exception e){ 
     } 
     System.out.println("Hello World!"); 
    } 
} 
+0

これを行うには、iReport/JasperStudioを使用してチャートを作成する必要がありますが、データはプログラムで埋められます。 –