JreeeChart入门
JFreeChart主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等
(源代码下载)
示例程序运用的jar包:
- jcommon-1.0.17.jar
- jfreechart-1.0.14.jar
1:普通柱状图
这是程序调用CategoryDataset dataset = getDataSet2(); 后所生产的图片
BarChartDemo.java柱状图代码
/** * 该类用于演示最简单的柱状图生成 * @author Winter Lau */ public class BarChartDemo { public static void main(String[] args) throws IOException{ CategoryDataset dataset = getDataSet2(); JFreeChart chart = ChartFactory.createBarChart3D( "水果产量图", // 图表标题 "水果", // 目录轴的显示标签 "产量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是 false) false, // 是否生成工具 false // 是否生成 URL 链接 ); //中文乱码 CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); CategoryAxis domainAxis = categoryplot.getDomainAxis(); TextTitle textTitle = chart.getTitle(); textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12)); chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D:\\BarChart.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f,chart,400,300,null); } finally { try { fos_jpg.close(); } catch (Exception e) {} } } /** * 获取一个演示用的简单数据集对象 * @return */ private static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "", "苹果"); dataset.addValue(200, "", "梨子"); dataset.addValue(300, "", "葡萄"); dataset.addValue(400, "", "香蕉"); dataset.addValue(500, "", "荔枝"); return dataset; } /** * 获取一个演示用的组合数据集对象 * @return */ private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "苹果"); dataset.addValue(100, "上海", "苹果"); dataset.addValue(100, "广州", "苹果"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "广州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "广州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); dataset.addValue(500, "广州", "荔枝"); return dataset; } }
2:饼状图
PieChartDemo.java饼状图源代码
/** * 用于演示饼图的生成 */ public class PieChartDemo { public static void main(String[] args) throws IOException { DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题 data, // 数据集 true, // 是否显示图例(对于简单的柱状图必须是 false) false, // 是否生成工具 false // 是否生成 URL 链接 ); //中文乱码 PiePlot3D plot = (PiePlot3D) chart.getPlot(); plot.setLabelFont(new Font("黑体", Font.PLAIN, 20)); TextTitle textTitle = chart.getTitle(); textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); // 写图表对象到文件,参照柱状图生成源码 FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D:\\Pie3DChart.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 300, null); } finally { try { fos_jpg.close(); } catch (Exception e) { } } } /** * 获取一个演示用的简单数据集对象 * * @return */ private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("苹果", 100); dataset.setValue("梨子", 200); dataset.setValue("葡萄", 300); dataset.setValue("香蕉", 400); dataset.setValue("荔枝", 500); return dataset; } }
其他的图表类型暂时不写了,其实写法也差不多。这里注意两种图形的中文乱码解决方法是不一样的,具体查看源代码中的红色部分
3:将数据库的内容用图形表示出来
index.jsp
<body> <form action="servlet/ShowChartServlet" method="get" > <input type="submit" value="jfreechart访问数据库生成图表"> </form> </body>
showJfreeChart.jsp
<body> <center> <img alt="" src="<%=path %>/reports/productSales.jpg"> </center> </body>
ShowChartServlet.java
public class ShowChartServlet extends HttpServlet { /** * 获取一个演示用的组合数据集对象 * * @return */ private static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); // 从数据库中获取 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载驱动程序 conn = DriverManager .getConnection( "jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=utf8", "root", "root"); ps = conn.prepareStatement("select p.name, count(pcount) from product p join salesitem si on (p.id = si.productid) group by p.id"); rs = ps.executeQuery(); while (rs.next()) { dataset.addValue(rs.getInt(2), "", rs.getString(1)); } rs.close(); rs = null; } catch (SQLException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } finally { if(ps != null){ try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } return dataset; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { CategoryDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createBarChart3D( "产品销量图", // 图表标题 "产品", // 目录轴的显示标签 "销量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是 false) false, // 是否生成工具 false // 是否生成 URL 链接 ); //中文乱码 CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); CategoryAxis domainAxis = categoryplot.getDomainAxis(); TextTitle textTitle = chart.getTitle(); textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12)); chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("E:\\Workspaces\\MyEclipse 9\\WebProjects\\JFreeChart\\WebRoot\\reports\\productSales.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f,chart,400,300,null); String path = this.getServletContext().getContextPath(); System.out.println(path+"mmmmmmmmmmm"); this.getServletContext().getRequestDispatcher("/showJfreeChart.jsp").forward(request, response); } finally { try { fos_jpg.close(); } catch (Exception e) {} } } }
JreeeChart入门的更多相关文章
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
随机推荐
- 使用CMD命令设置IP
使用CMD命令设置IP,将下面文本保存为bat文件后执行 netsh interface ip set address name="本地连接" source=static addr ...
- rabbitmq redis
RabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统. 对于RabbitMQ来说,生产和消费不再针对内存里的一个Queue对象,而是某台服务器上的RabbitMQ Se ...
- 20145320 《Java程序设计》第8周学习总结
20145320 <Java程序设计>第8周学习总结 教材学习内容总结 15.1日志 java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可以在标准ja ...
- 2Sigma OA prepare: Friends Circle
DFS & BFS: 关键在于构造graph package twoSigma; import java.util.ArrayList; import java.util.HashSet; i ...
- sql 中实现往表中插入一条记录并返回当前记录的ID
写一条存储过程,实现往User中插入一条记录并返回当前UserId(自增长id) --推荐写法 if(Exists(select * from sys.objects where name=N'Usp ...
- android 文字图片合成
引用:http://blog.csdn.net/cq361106306/article/details/8142526 两种方法: 1.直接在图片上写文字 String str = "PIC ...
- 十三、Java基础---------多线程总结
多线程概述 理解多线程首先应明确线程,要了解线程就必须了解什么是进程. 1.进程 是一个正在执行的程序. 每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 2.线程 就是进程 ...
- "未能找到类型或命名空间名称",引用dll的时候出错
当前项目是.net2.0框架,引用的dll是 .net 4.5框架,引用后编译时报错“未能找到类型或命名空间名称”. 当前项目 右键-->应用程序-->目标框架 改为 .net frame ...
- Weblogic 所有BEA错误代码详细信息列表
范围 子系统 类别 BEA-000001 – BEA-009999 ConsensusLeasing DatabaseLessLeasing DatabaseLessLeasing BEA-00010 ...
- mysql常用命令(2)
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...