JfreeChat简单报表制作

 
//测试类
import java.awt.EventQueue;
import java.awt.SystemColor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

/*******************************************************************************
 * @author 呀呵 E-mail:yahesmile@126.com
 * @version 创建时间:2012-5-10 上午10:42:44
 * 
 * 类说明
 ******************************************************************************/
public class JfreeChatDemoFrame extends JDialog {

	int count[] = { 55, 50, 48, 45, 42, 41, 38, 34, 31, 20 };
	String name[] = { "红楼梦", "我的世界", "深海有人鱼", "java百科", "android开发", "养生之道",
			"人生", "彭格马的夏天", "那些年一起追过的女孩", "世界百科" };
	int count2[] = { 55, 50, 48, 45, 42, 41, 38, 34, 31, 20, 12, 45, 12, 78,
			12, 14, 36, 46, 98, 24, 48, 45, 42, 41, 38, 34, 31, 20, 12, 45, 14,
			36, 46, 98, 24, 48, 45, 42, 41, 38, 98, 24, 48, 45, 42, 41, 38, 34,
			31, 20 };

	ArrayList<Rank> rankList = new ArrayList<Rank>();
	ArrayList<Rank> rankList2 = new ArrayList<Rank>();

	public static void main(String args[]) {

		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					JfreeChatDemoFrame frame = new JfreeChatDemoFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public JfreeChatDemoFrame() {
		super();
		for (int i = 0; i < count.length; i++) {
			Rank rank = new Rank(name[i], count[i],i+1+"名");
			rankList.add(rank);
		}
		for (int i = 0; i < 4; i++) {
			for(int j=0;j<10;j++){
				Rank rank = new Rank(name[i], count2[j+i*10],j+1+"月");
				rankList2.add(rank);
			}
		}
		getContentPane().setBackground(SystemColor.control);
		getContentPane().setLayout(null);
		setTitle("借阅查询");
		setBounds(100, 100, 673, 514);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

		this.addWindowListener(new WindowAdapter() {

			@Override
			public void windowClosing(WindowEvent e) {
				int result = JOptionPane.showConfirmDialog(
						JfreeChatDemoFrame.this, "确定退出系统", "系统提示",
						JOptionPane.YES_NO_OPTION);
				if (result == JOptionPane.YES_OPTION) {
					JfreeChatDemoFrame.this.dispose();
				}
			}
		});
		// 折线图
		//final JPanel panel = new ChartDemo().generateLineChart(rankList2);
		// 柱状图
		//final JPanel panel = new ChartDemo().createDemoPanel(rankList);
		// 饼状图
		final JPanel panel = new JfreeChatUtil().generatePieChart(rankList);
		panel.setBackground(SystemColor.control);
		;
		panel.setBounds(10, 22, 645, 401);
		getContentPane().add(panel);

		final JButton btnPrint = new JButton();
		btnPrint.setBounds(438, 446, 75, 27);
		btnPrint.setIcon(new ImageIcon("image/print.png"));
		btnPrint.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {

				JfreeChatUtil.ganarateFruitChart(rankList);
			}

		});
		getContentPane().add(btnPrint);

		final JButton btnCancel = new JButton();
		btnCancel.setBounds(550, 446, 75, 27);
		btnCancel.setIcon(new ImageIcon("image/reback.png"));
		btnCancel.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				JfreeChatDemoFrame.this.dispose();
			}

		});
		getContentPane().add(btnCancel);
		//
		setModal(true);
	}

}
//实现类

import java.awt.Color;
import java.awt.RenderingHints;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

import javax.servlet.http.HttpSession;
import javax.swing.JPanel;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

public class JfreeChatUtil {
 /**
  * 柱状图
  * 
  * @param rankList
  * @return
  */
 public static JPanel createDemoPanel(ArrayList<Rank> rankList) {

  CategoryDataset dataset = getDataSet(rankList);
  JFreeChart chart = ChartFactory.createBarChart3D("图书借阅前10名", // 图表标题
    "图书名称", // 目录轴的显示标签
    "借阅次数", // 数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:水平、垂直
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );

  return new ChartPanel(chart);
 }

 /**
  * 饼状图
  */
 public static JPanel generatePieChart(ArrayList<Rank> rankList) {

  PieDataset dataset = getDataSetPie(rankList);
  JFreeChart chart = ChartFactory.createPieChart3D("图书借阅图", // 图表标题
    dataset, // 数据集
    true, // 是否显示图例
    false, // 是否生成工具
    false // 是否生成URL链接
    );
  chart.setBackgroundPaint(Color.pink);
  return new ChartPanel(chart);
 }

 /**
  * 折线图
  */
 public static JPanel generateLineChart(ArrayList<Rank> rankList) {
  CategoryDataset dataset = getDataSetLine(rankList);
  JFreeChart chart = ChartFactory.createLineChart("图书借阅图", // 图表标题
    "图书", // 目录轴的显示标签
    "借阅数", // 数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:水平、垂直
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );

  //设置消除字体的锯齿渲染(解决中文问题)
  chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
    RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);

  //配置图表属性
  // 1,设置整个图表背景颜色
  chart.setBackgroundPaint(Color.pink);

  //设定Plot参数
  CategoryPlot plot = chart.getCategoryPlot();
  // 2,设置详细图表的显示细节部分的背景颜色
  // plot.setBackgroundPaint(Color.PINK);
  // 3,设置垂直网格线颜色
  plot.setDomainGridlinePaint(Color.black);
  // 4,设置是否显示垂直网格线
  plot.setDomainGridlinesVisible(true);
  // 5,设置水平网格线颜色
  plot.setRangeGridlinePaint(Color.blue);
  // 6,设置是否显示水平网格线
  plot.setRangeGridlinesVisible(true);

  return new ChartPanel(chart);
 }

 /**
  * 获取饼状数据
  * 
  * @param rankList
  * @return
  */
 private static PieDataset getDataSetPie(ArrayList<Rank> rankList) {

  DefaultPieDataset dataset = new DefaultPieDataset();
  for (int i = 0; i < rankList.size(); i++) {
   dataset.setValue(rankList.get(i).getName(), rankList.get(i)
     .getCount());
  }
  return dataset;
 }

 /**
  * 获取柱状数据
  * 
  * @param rankList
  * @return
  */
 private static CategoryDataset getDataSet(ArrayList<Rank> rankList) {

  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  for (int i = 0; i < rankList.size(); i++) {
   dataset.addValue(rankList.get(i).getCount(), rankList.get(i)
     .getName(), rankList.get(i).getDate());
  }
  return dataset;
 }

 /**
  * 获取曲线数据
  * 
  * @param rankList
  *            数据集
  * @return
  */
 private static CategoryDataset getDataSetLine(ArrayList<Rank> rankList) {

  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  for (int i = 0; i < rankList.size(); i++) {
   dataset.addValue(rankList.get(i).getCount(), rankList.get(i)
     .getName(), rankList.get(i).getDate());
  }
  return dataset;
 }

 /**
  * 本地生成图片
  * 
  * @param count
  * @param bookName
  */
 public static void ganarateFruitChart(ArrayList<Rank> rankList) {

  CategoryDataset dataset = getDataSet(rankList);
  JFreeChart chart = ChartFactory.createBarChart3D("图书借阅", // 图表标题
    "月份", // 目录轴的显示标签
    "借阅数", // 数值轴的显示标签
    dataset, // 数据集
    PlotOrientation.VERTICAL, // 图表方向:水平、垂直
    true, // 是否显示图例(对于简单的柱状图必须是false)
    false, // 是否生成工具
    false // 是否生成URL链接
    );

  FileOutputStream fos_jpg = null;
  try {
   fos_jpg = new FileOutputStream("image/bookRank.jpg");
   ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 300,
     null);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    fos_jpg.close();
   } catch (Exception e) {
   }
  }
 }
}

//数据类

/*******************************************************************************
 * @author 呀呵 E-mail:yahesmile@126.com
 * @version 创建时间:2012-5-21 上午08:32:38
 * 
 * 数据类
 ******************************************************************************/
public class Rank {
 // 名称
 private String name;
 // 数量
 private int count;
 // 排名或时间
 private String date;

 public Rank() {
 }

 public Rank(String name, int count) {
  super();
  this.name = name;
  this.count = count;
 }

 

 public Rank(String name, int count, String date) {
  super();
  this.name = name;
  this.count = count;
  this.date = date;
 }

 public String getDate() {
  return date;
 }

 public void setDate(String date) {
  this.date = date;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getCount() {
  return count;
 }

 public void setCount(int count) {
  this.count = count;
 }

}


 


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值