2012年4月17日,嘿嘿,公司做到报表问题,结合公司,使用了JFreeChart,自己花了一个上午学习,总结一点出来了,希望能对所有在IT新接触人员有所帮助!
首先,去官方网站:
http://www.jfree.org/jfreechart/ 下载,获取jar
public class Test {
/**
* @author 钟艳明 QQ:962589149
*/
public static void main(String[] args) {
Test test=new Test();
test.disPlay();
test.display2();
test.display3();
test.display4(null);
}
//圆饼形状
public void display4(CategoryDataset dataset)
{
DefaultCategoryDataset cds = new DefaultCategoryDataset();
cds.setValue(20, "英语1", "英语");
cds.setValue(10, "数学1", "数学");
cds.setValue(15, "语文", "语文");
cds.setValue(25, "d", "物理");
cds.setValue(30, "e", "化学");
if(dataset==null)
{
dataset=cds;
}
JFreeChart chart = ChartFactory.createBarChart("课程分布图","课程", "比例", dataset, PlotOrientation.VERTICAL, true, true, true);
CategoryPlot plot = chart.getCategoryPlot();
CategoryAxis domainAxis = plot.getDomainAxis();//x轴
ValueAxis numberaxis = plot.getRangeAxis(); //y轴
TextTitle t = chart.getTitle();
t.setFont(new Font("宋体",Font.BOLD,40));//标题文字
domainAxis.setLabelFont(new Font("宋体",Font.BOLD,20));//x轴标题文字
domainAxis.setTickLabelFont(new Font("黑体",Font.BOLD,10));//x轴坐标上文字
numberaxis.setLabelFont(new Font("宋体",Font.BOLD,20));//y轴标题文字
numberaxis.setTickLabelFont(new Font("黑体",Font.BOLD,10));//y轴坐标上文字
chart.getLegend().setItemFont(new Font("黑体",Font.BOLD,12));//图例文字
ChartFrame frame=new ChartFrame ("CityInfoPort公司组织架构图 ",chart,true);
frame.pack();
frame.setVisible(true);
}
//保存为图片
public void display3()
{
try{
//初始化数据
double[][] data = new double[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}};
String[] rowKeys = {"猪肉", "niurou","鸡肉", "鱼肉"};
String[] columnKeys = {"广州", "shenzhen", "东莞", "佛山"};
//创建数据源
CategoryDataset dataset=DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data);
//创建折线图
JFreeChart chart = ChartFactory.createBarChart3D("全国食物统计","肉类","销量",dataset,PlotOrientation.VERTICAL,true,true,false);
//获取绘图对象
CategoryPlot plot = chart.getCategoryPlot();
//获取X Y轴
CategoryAxis domainAxis = plot.getDomainAxis();
NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
//解决标题乱码
chart.getTitle().setFont(new Font("宋体",Font.BOLD,16));
//解决X轴乱码
domainAxis.setLabelFont(new Font("宋体",Font.PLAIN, 16));
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
//解决Y轴乱码
numberaxis.setLabelFont(new Font("宋体",Font.PLAIN, 16));
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
//解决底部乱码问题
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 16));
//图片保存路径
String imageURL ="D://yanming/201200021233.png";
FileOutputStream jpg = null;
jpg = new FileOutputStream(imageURL);
int width=630;
int height=400;
ChartUtilities.writeChartAsPNG(jpg, chart, width,height);
System.out.println("图片创建成功!");
}catch(Exception ex)
{
ex.printStackTrace();
}
}
//第二种显示方式
public void display2()
{
//初始化
double[][] data = new double[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}};
String[] rowKeys = {"猪肉", "niurou","鸡肉", "鱼肉"};
String[] columnKeys = {"广州", "shenzhen", "东莞", "佛山"};
//创建数据源
CategoryDataset dataset=DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data);
//创建折线图
JFreeChart chart = ChartFactory.createBarChart3D("全国食物统计","肉类","销量",dataset,PlotOrientation.VERTICAL,true,true,false);
//获取绘图对象
CategoryPlot plot = chart.getCategoryPlot();
//获取X Y轴
CategoryAxis domainAxis = plot.getDomainAxis();
NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
//解决标题乱码
chart.getTitle().setFont(new Font("宋体",Font.BOLD,16));
//解决X轴乱码
domainAxis.setLabelFont(new Font("宋体",Font.PLAIN, 16));
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
//解决Y轴乱码
numberaxis.setLabelFont(new Font("宋体",Font.PLAIN, 16));
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
//解决底部乱码问题
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 16));
ChartFrame frame=new ChartFrame ("CityInfoPort公司组织架构图 ",chart,true);
frame.pack();
frame.setVisible(true);
}
//最简单的一种现实方式,传入的是一个map
public void disPlay()
{
// TODO 自动生成方法存根
DefaultPieDataset dfp=new DefaultPieDataset();
dfp.setValue("管理人员", 25);
dfp.setValue("市场人员", 35);
dfp.setValue("开发人员", 20);
dfp.setValue("后勤人员", 5);
dfp.setValue("财务人员", 15);
//Create JFreeChart object
JFreeChart chart =ChartFactory.createPieChart("CityInfoPort公司组织架构图",dfp, true, true, true);
//解决乱码问题 标题
//乱码解决开始
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("宋体", Font.PLAIN, 20)); //标题文字乱码
PiePlot plot=(PiePlot)chart.getPlot();
plot.setLabelFont(new Font("宋体",Font.BOLD,20));//饼上的文字乱码
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); //图例文字乱码
//乱码解决结束
ChartFrame frame=new ChartFrame ("CityInfoPort公司组织架构图 ",chart,true);
frame.setFont(new Font("宋体", Font.BOLD, 15));
frame.pack();
frame.setVisible(true);
}
}
下面是效果图