//测试类
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;
}
}