回転:レポートプラグインJFreeChartの使用

17174 ワード

別の例のリンクアドレスは、2つの参照を組み合わせることができます.http://blog.csdn.net/pzhtpf/article/details/7600100
前提:必要な2つのjarファイル、jcommon-バージョン番号をインポートします.jar,jfreechart-バージョン番号.jar.
添付ファイル:jfreechart-1.0.13
注意:ダウンロードしたJfreechartバージョンはあまり高くないでください.新しいバージョンは中国語の表示に問題があります.
例1:比較的簡単なアプリケーションバージョンのクッキー図

package com.test.jfreechart;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class JFreeChartTest
{
    public static void main(String[] args)
    {
        DefaultPieDataset dpd=new DefaultPieDataset(); //         
        dpd.setValue("    ", 25);  //    
        dpd.setValue("    ", 25);
        dpd.setValue("    ", 45);
        dpd.setValue("    ", 10);
        
        JFreeChart chart=ChartFactory.createPieChart("          ",dpd,true,true,false); 
        //      API  ,        ,           ,           Legend,             ,             URL
        
        ChartFrame chartFrame=new ChartFrame("          ",chart); 
        //chart   Java     ,ChartFrame   java Jframe 。                  ,        。
        chartFrame.pack(); //          
        chartFrame.setVisible(true);//      
        
    }
}

実行結果は次のとおりです.
转:报表插件JFreeChart的使用_第1张图片
注意:グラフは次の3つのセクションで構成されています.
转:报表插件JFreeChart的使用_第2张图片
例2:より明確な構造のアプリケーションバージョンの柱状図で、論理を各関数に分割します.

package com.test.jfreechart;

import java.awt.Font;

import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;

public class JFreeChartTest2 extends ApplicationFrame
{
    public JFreeChartTest2(String title)
    {
        super(title);
        this.setContentPane(createPanel()); //         Java panel  
    }
    
    public static CategoryDataset createDataset() //        
    {
        DefaultCategoryDataset dataset=new DefaultCategoryDataset();
        dataset.setValue(10,"a","    ");
        dataset.setValue(20,"b","    ");
        dataset.setValue(40,"c","    ");
        dataset.setValue(15,"d","    ");
        return dataset;
    }
    
    public static JFreeChart createChart(CategoryDataset dataset) //          
    {
        JFreeChart chart=ChartFactory.createBarChart("hi", "    ", 
                "    ", dataset, PlotOrientation.VERTICAL, true, true, false); //    JFreeChart
        chart.setTitle(new TextTitle("        ",new Font("  ",Font.BOLD+Font.ITALIC,20)));//        ,  “hi”  
        CategoryPlot plot=(CategoryPlot)chart.getPlot();//        , plot
        CategoryAxis categoryAxis=plot.getDomainAxis();//     
        categoryAxis.setLabelFont(new Font("    ",Font.BOLD,12));//       
        return chart;
    }
    
    public static JPanel createPanel()
    {
        JFreeChart chart =createChart(createDataset());
        return new ChartPanel(chart); // chart    Panel    ,ChartPanel    Jpanel
    }
    
    public static void main(String[] args)
    {
        JFreeChartTest2 chart=new JFreeChartTest2("        ");
        chart.pack();//        
        chart.setVisible(true);
        
    }
}

実行結果は次のとおりです.
转:报表插件JFreeChart的使用_第3张图片
例3:チャートをJPEG形式の画像に変換するアプリケーション

package com.test.jfreechart;

import java.awt.Font;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;

public class JFreeChartTest3
{
    public static void main(String[] args) throws Exception
    {
        JFreeChart chart=ChartFactory.createPieChart("          ",getDataset(),true,true,false);
        chart.setTitle(new TextTitle("        ",new Font("  ",Font.BOLD+Font.ITALIC,20)));
        
         LegendTitle legend=chart.getLegend(0);//  Legend
         legend.setItemFont(new Font("  ",Font.BOLD,14));
         PiePlot plot=(PiePlot) chart.getPlot();//  Plot
         plot.setLabelFont(new Font("  ",Font.BOLD,16));
         
        OutputStream os = new FileOutputStream("company.jpeg");//        ,    FileOutputStream    。
        ChartUtilities.writeChartAsJPEG(os, chart, 1000, 800);
        //      application    , chart   JPEG     。 3      , 4      。
        
        os.close();//     
    }

    private static DefaultPieDataset getDataset()
    {
        DefaultPieDataset dpd=new DefaultPieDataset(); //         
        dpd.setValue("    ", 25);  //    
        dpd.setValue("    ", 25);
        dpd.setValue("    ", 45);
        dpd.setValue("    ", 10);
        return dpd;
    }
}

実行結果は以下の通りで、このプロジェクトのルートディレクトリの下にJPEG形式の画像が生成され、webrootディレクトリの下ではないことに注意します.
转:报表插件JFreeChart的使用_第4张图片
インスタンス4:インスタンス3のように生成されたピクチャをJSPページに埋め込む.
1.web.xmlには、以下の構成情報が加える.

<servlet>
    <servlet-name>DisplayChart</servlet-name>
    <servlet-class>
        org.jfree.chart.servlet.DisplayChart   <!--      -->
    </servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>DisplayChart</servlet-name>
        <url-pattern>/DisplayChart</url-pattern>
    </servlet-mapping>

2.jfreeChart.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
    
<%@ page import="org.jfree.data.general.DefaultPieDataset,org.jfree.chart.ChartFactory
,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.*" %>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>

<%

    DefaultPieDataset dpd = new DefaultPieDataset();
    
    dpd.setValue("    ", 25);
    dpd.setValue("    ", 25);
    dpd.setValue("    ", 45);
    dpd.setValue("    ", 10);
    
    JFreeChart chart = ChartFactory.createPieChart("        ",dpd, true, false, false);
    
    String fileName = ServletUtilities.saveChartAsPNG(chart,800,600,session); 
    //ServletUtilities   web      ,          ,       ,              (tomcat)      (temp)
    
    String url = request.getContextPath() + "/DisplayChart?filename=" + fileName;
    //                ,   /DisplayChart               <url-pattern>  

%>

<img src="<%= url %>" width="800" height="600">


</body>
</html>

次の結果が表示されます.
转:报表插件JFreeChart的使用_第5张图片
例5:運動項目への投票をシミュレートし、投票JFreeChartグラフを表示する
原理:サーバが再起動しない場合、session結果は依然としてシミュレーション投票機能を保存し、struts 2-jfreechart-plugin-バージョン番号を使用する.JArプラグインは、グラフオブジェクトをactionで自動的にレンダリングします.
注意:struts 2-jfreechart-plugin-バージョン番号を追加するのを忘れないでください.jarは工事中です.
1.Actionクラス:

package com.test.action;

import java.awt.Font;
import java.util.List;
import java.util.Map;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ViewResultAction extends ActionSupport
{
    private JFreeChart chart;//        chart,        

    private List<String> interest; //struts       ,           List  

    public JFreeChart getChart()//getChart()      ,setChart()    .
    {                            // action  chart   get   ,  chart  ,      plot     ;  legend     
    
        chart = ChartFactory.createBarChart("      ", "  ", "  ", this
                .getDataset(), PlotOrientation.VERTICAL, false, false, false);
        
        chart.setTitle(new TextTitle("      ",new Font("  ",Font.BOLD,22)));
        
        CategoryPlot plot = (CategoryPlot)chart.getPlot();
        
        CategoryAxis categoryAxis = plot.getDomainAxis();
        
        categoryAxis.setLabelFont(new Font("  ",Font.BOLD,22));
        
        categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//    
        
        NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
        
        numberAxis.setLabelFont(new Font("  ",Font.BOLD,22));
        
        return chart;
    }

    public List<String> getInterest()
    {
        return interest;
    }

    public void setInterest(List<String> interest)
    {
        this.interest = interest;
    }

    @Override
    public String execute() throws Exception
    {
        return SUCCESS;
    }

    @SuppressWarnings("unchecked")
    private void increaseResult(List<String> list)//           action  ,    model 
    {                                             //         
        
        ActionContext context = ActionContext.getContext();//struts servlet      

        Map map = context.getApplication();

        for (String str : list)
        {
            if (null == map.get(str))//         
            {
                map.put(str, 1);
            }
            else
            {
                map.put(str, (Integer) map.get(str) + 1);
            }
        }
    }

    @SuppressWarnings("unchecked")
    private CategoryDataset getDataset() //     。
    {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();

        this.increaseResult(this.getInterest());

        ActionContext context = ActionContext.getContext();

        Map map = context.getApplication();

        dataset.setValue((Integer) map.get("football"), "", "  ");//      
        dataset.setValue((Integer) map.get("basketball"), "", "  ");
        dataset.setValue((Integer) map.get("volleyball"), "", "  ");
        dataset.setValue((Integer) map.get("badminton"), "", "   ");

        return dataset;
    }

}

2.Jspページ

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
      <h1><font color="blue">          </font></h1>
      <s:form action="viewResult">
      <s:checkbox name="interest" label="  " fieldValue="football"></s:checkbox>
      <s:checkbox name="interest" label="  " fieldValue="basketball"></s:checkbox>
      <s:checkbox name="interest" label="  " fieldValue="volleyball"></s:checkbox>
      <s:checkbox name="interest" label="   " fieldValue="badminton"></s:checkbox>
      <!--
      <s:checkboxlist list="#{'computer':'   ','math':'  '}" name="interest" label="  " labelposition="top"></s:checkboxlist>
      -->
      <s:submit value="  "></s:submit>
      </s:form>


  </body>
</html>

3.struts.xmlの構成

<package name="struts2" extends="struts-default,jfreechart-default">

注意:ここのバッグは2つ継承します.ネット上でよく使われる方法はstruts 2-jfreechart-plugin-バージョン番号です.JArプラグインを解凍し、struts-plugin-xmlのpackageを変更してstruts-defaultパッケージに継承させて再パッケージし、actionのpackageパッケージをextends=jfreechart-defaultに構成するのは面倒だと感じます.やはり2つのバッグを直接引き継ぐのが便利です.

<action name="viewResult" class="com.test.action.ViewResultAction">     <result name="success" type="chart">         <param name="height">600</param>         <param name="width">800</param>     </result> </action>

ここでタグにJSPページを追加してジャンプする必要はなく、chartで指定されたChartResultクラスに直接ジャンプして処理します.
struts-plugin-xmlファイルの内容を添付します.

<struts> 
<package name="jfreechart-default"> 
<result-types> 
  <result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"> 
    <param name="height">150</param> 
    <param name="width">200</param> 
  </result-type> 
</result-types> 
</package>
</struts>

最終ページに結果が表示されます.
转:报表插件JFreeChart的使用_第6张图片