【知了堂学习笔记】JfreeChart制作一些简单的报表
来源:互联网 发布:图片叠加软件 编辑:程序博客网 时间:2024/05/22 10:39
利用JfreeChart 制作报表,JfreeChart是是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,JfreeChart可以生成饼图(pie charts)、柱状图(bar charts)、散点图(scatterplots)、时序图(time series)、甘特图(Gantt charts)等,
在制作报表之前首先需要导入 jcommon-1.0.23.jar 和 jfreechart.jar 两个jar包。
一、饼图
制作一个简单的饼图只需要几个步骤:
1. 创建数据源 DefaultPieDataset
2. 创建绘制图像的类JfreeChart
3. 设置一下图像的简单的格式
这是一个简单的饼图
下面是一个3D的饼图,只需要创建饼图的时候为3D就行了
JFreeChart chart = ChartFactory.createPieChart3D("材料数据图", dpt, true, true, false)
package jfree;import java.awt.Color;import java.awt.Font;import java.io.IOException;import java.io.OutputStream;import java.sql.DriverManager;import java.sql.ResultSet;import java.text.NumberFormat;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.StandardChartTheme;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.block.BlockBorder;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.title.TextTitle;import org.jfree.data.general.DefaultPieDataset;import org.jfree.util.Rotation;import com.mysql.jdbc.PreparedStatement;import jfree.dao.jfreeDao;import jfree.model.MaterModel;import jfree.model.jfreeimpl;/** * Servlet implementation class jfreetest */@WebServlet("/jfreetest")public class jfreetest extends HttpServlet {private static final long serialVersionUID = 1L;private jfreeDao jf = new jfreeimpl();protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<MaterModel> list = jf.getshow();DefaultPieDataset dpt = new DefaultPieDataset();for (MaterModel ma : list) {dpt.setValue(ma.getMaterial_name(), ma.getMaterial_number());}//设置中文乱码StandardChartTheme standardChartTheme = new StandardChartTheme("CN");standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));ChartFactory.setChartTheme(standardChartTheme);//设置背景颜色standardChartTheme.setChartBackgroundPaint(new Color(176,224,230));standardChartTheme.setPlotBackgroundPaint(new Color(176,224,230));standardChartTheme.setPlotOutlinePaint(new Color(176,224,230));// 创建饼状图,第一个参数是标题,第二个参数是一个数据集,第三个参数表示是否显示Legend,第四个参数表示是否显示提示,第五个参数表示图中是否存在URLJFreeChart chart = ChartFactory.createPieChart3D("材料数据图", dpt, true, true, false);chart.getLegend().setFrame(new BlockBorder(Color.WHITE));//设置显示百分比PiePlot pieplot = (PiePlot) chart.getPlot();pieplot.setLabelFont(new Font("宋体", 0, 15));StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator("{0}:({1},{2})",NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());pieplot.setLabelGenerator(standarPieIG);pieplot.setLabelOutlinePaint(null); //设置旋转角度 pieplot.setStartAngle(180.0); //设置旋转方向,Rotation.CLOCKWISE)为顺时针。 pieplot.setDirection(Rotation.CLOCKWISE); //设置图表透明图0.0~1.0范围。0.0为完全透明,1.0为完全不透明。 pieplot.setForegroundAlpha(0.7F);//输出流OutputStream os = response.getOutputStream();response.setContentType("image/jpeg");ChartUtilities.writeChartAsJPEG(os, chart, 650, 500);}}
这是一个3D饼图,并设置一个透明的效果,在材料的名称旁加入了一个百分比数值。
柱状图:
package jfree;import java.awt.Color;import java.awt.Font;import java.io.IOException;import java.io.OutputStream;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.swing.JPanel;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartPanel;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.StandardChartTheme;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.block.BlockBorder;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.ui.ApplicationFrame;import com.mysql.jdbc.PreparedStatement;import jfree.dao.jfreeDao;import jfree.model.MaterModel;import jfree.model.jfreeimpl;@WebServlet("/jfreetest2")public class jfreetest2 extends HttpServlet {private jfreeDao jf = new jfreeimpl();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {List<MaterModel> list = jf.getshow();DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (MaterModel ma : list) {dataset.setValue(ma.getMaterial_number(), ma.getMaterial_supplier(),ma.getMaterial_name());}StandardChartTheme standardChartTheme = new StandardChartTheme("CN");standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 15));standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 15));ChartFactory.setChartTheme(standardChartTheme);standardChartTheme.setChartBackgroundPaint(new Color(176,224,230));standardChartTheme.setPlotBackgroundPaint(new Color(176,224,230));standardChartTheme.setPlotOutlinePaint(new Color(176,224,230));JFreeChart chart = ChartFactory.createBarChart("hi", "材料分类", "材料数量", dataset, PlotOrientation.VERTICAL, true,true, false); // 创建一个JFreeChartchart.getLegend().setFrame(new BlockBorder(Color.WHITE));chart.setTitle(new TextTitle("材料数据图", new Font("宋体", Font.BOLD , 15)));// 可以重新设置标题,替换“hi”标题CategoryPlot plot = (CategoryPlot) chart.getPlot();// 获得图标中间部分,即plotCategoryAxis categoryAxis = plot.getDomainAxis();// 获得横坐标categoryAxis.setLabelFont(new Font("微软雅黑", Font.BOLD, 12));// 设置横坐标字体BarRenderer barrenderer = new BarRenderer();barrenderer.setMaximumBarWidth(0.5);barrenderer.setItemMargin(0.0);plot.setRenderer(barrenderer);OutputStream os = response.getOutputStream();response.setContentType("image/jpeg");ChartUtilities.writeChartAsJPEG(os, chart, 600, 500);}}
制作柱状图的步骤和饼图的步骤一样。
因为这是一个通过连接数据库,将表的内容输出成报表,所以报表的内容是用的数据库的,简单报表的内容可以自己设定,不用连接数据库,用setvalue() 来设置内容。
数据库的连接:
package jfree.model;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanListHandler;import jfree.dao.jfreeDao;public class jfreeimpl implements jfreeDao {private final static String USER_NAME = "root";private final static String PASSWORD = "123456";private final static String URL = "jdbc:mysql://localhost:3306/test";private final static String Driver = "com.mysql.jdbc.Driver";public jfreeimpl() {try {Class.forName(Driver);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic List<MaterModel> getshow() {String mysql = "select * from materialform";Connection conn = null;List<MaterModel> list = null;try {conn = DriverManager.getConnection(URL, USER_NAME, PASSWORD);QueryRunner queryRunner = new QueryRunner();list = queryRunner.query(conn, mysql, new BeanListHandler<>(MaterModel.class));} catch (SQLException e) {e.printStackTrace();}return list;}}
阅读全文
1 0
- 【知了堂学习笔记】JfreeChart制作一些简单的报表
- 【知了堂学习笔记】JFreeChart
- 【知了堂学习笔记】jfreechart创建简单的柱状图和饼图
- 【知了堂学习笔记】Java中static关键字的一些简单使用方法
- 【知了堂学习笔记】JSTL的简单介绍
- [知了堂学习笔记]_Spring中AOP的简单理解
- [知了堂学习笔记]_break的用法
- [知了堂学习笔记]_JS的数据类型
- [知了堂学习笔记] jQuery的事件
- [知了堂学习笔记]_jQuery的事件
- 【知了堂学习笔记】简单了解java集合类
- 【知了堂学习笔记】Nginx+Tomcat实现简单负载均衡
- [知了堂学习笔记]_JavaScript
- [知了堂学习笔记]_Java中session的学习
- 【知了堂学习笔记】_Java中cookie的学习
- 【知了堂学习笔记】_Java中ServletContext的学习
- 【知了堂学习笔记】CSS3令人眼前一亮的网页文字效果
- 【知了堂学习笔记】String的创建过程—第一章
- vue组件初学--弹射小球
- chapter14_4重映射—remap()
- Vue.js(菜鸟自学)
- SQLite数据类型
- Codeforces 854 A Fraction
- 【知了堂学习笔记】JfreeChart制作一些简单的报表
- Whitelabel Error Page(2)之Internal Server Error
- struts2中 ServletActionContext与ActionContext区别
- Swift中懒加载
- CGlib动态代理中Enhancer.create()函数的逻辑
- 线性时间排序
- 虚拟机中linux系统启动的tomcat无法在本机访问的问题
- 缓存穿透与缓存雪崩
- 软件测试知识点