JFreeChart入门
JFreeChart主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等
(源代码下载)
示例程序运用的jar包:
- jcommon-1.0.17.jar
- jfreechart-1.0.14.jar
1:普通柱状图
这是程序调用CategoryDataset dataset = getDataSet2(); 后所生产的图片
BarChartDemo.java柱状图代码
1 /** 2 * 该类用于演示最简单的柱状图生成 3 * @author Winter Lau 4 */ 5 public class BarChartDemo { 6 public static void main(String[] args) throws IOException{ 7 8 CategoryDataset dataset = getDataSet2(); 9 JFreeChart chart = ChartFactory.createBarChart3D( 10 "水果产量图", // 图表标题 11 "水果", // 目录轴的显示标签 12 "产量", // 数值轴的显示标签 13 dataset, // 数据集 14 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 15 true, // 是否显示图例(对于简单的柱状图必须是 false) 16 false, // 是否生成工具 17 false // 是否生成 URL 链接 18 ); 19 //中文乱码 20 CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); 21 NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); 22 CategoryAxis domainAxis = categoryplot.getDomainAxis(); 23 TextTitle textTitle = chart.getTitle(); 24 textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); 25 domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); 26 domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); 27 numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); 28 numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12)); 29 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 30 31 FileOutputStream fos_jpg = null; 32 try { 33 fos_jpg = new FileOutputStream("D:\\BarChart.jpg"); 34 ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f,chart,400,300,null); 35 } finally { 36 try { 37 fos_jpg.close(); 38 } catch (Exception e) {} 39 } 40 } 41 /** 42 * 获取一个演示用的简单数据集对象 43 * @return 44 */ 45 private static CategoryDataset getDataSet() { 46 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 47 dataset.addValue(100, "", "苹果"); 48 dataset.addValue(200, "", "梨子"); 49 dataset.addValue(300, "", "葡萄"); 50 dataset.addValue(400, "", "香蕉"); 51 dataset.addValue(500, "", "荔枝"); 52 return dataset; 53 } 54 /** 55 * 获取一个演示用的组合数据集对象 56 * @return 57 */ 58 private static CategoryDataset getDataSet2() { 59 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 60 dataset.addValue(100, "北京", "苹果"); 61 dataset.addValue(100, "上海", "苹果"); 62 dataset.addValue(100, "广州", "苹果"); 63 dataset.addValue(200, "北京", "梨子"); 64 dataset.addValue(200, "上海", "梨子"); 65 dataset.addValue(200, "广州", "梨子"); 66 dataset.addValue(300, "北京", "葡萄"); 67 dataset.addValue(300, "上海", "葡萄"); 68 dataset.addValue(300, "广州", "葡萄"); 69 dataset.addValue(400, "北京", "香蕉"); 70 dataset.addValue(400, "上海", "香蕉"); 71 dataset.addValue(400, "广州", "香蕉"); 72 dataset.addValue(500, "北京", "荔枝"); 73 dataset.addValue(500, "上海", "荔枝"); 74 dataset.addValue(500, "广州", "荔枝"); 75 return dataset; 76 } 77 }
2:饼状图
PieChartDemo.java饼状图源代码
1 /** 2 * 用于演示饼图的生成 3 */ 4 public class PieChartDemo { 5 public static void main(String[] args) throws IOException { 6 DefaultPieDataset data = getDataSet(); 7 JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题 8 data, // 数据集 9 true, // 是否显示图例(对于简单的柱状图必须是 false) 10 false, // 是否生成工具 11 false // 是否生成 URL 链接 12 ); 13 14 //中文乱码 15 PiePlot3D plot = (PiePlot3D) chart.getPlot(); 16 plot.setLabelFont(new Font("黑体", Font.PLAIN, 20)); 17 TextTitle textTitle = chart.getTitle(); 18 textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); 19 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 20 21 // 写图表对象到文件,参照柱状图生成源码 22 FileOutputStream fos_jpg = null; 23 try { 24 fos_jpg = new FileOutputStream("D:\\Pie3DChart.jpg"); 25 ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 300, 26 null); 27 } finally { 28 try { 29 fos_jpg.close(); 30 } catch (Exception e) { 31 } 32 } 33 } 34 35 /** 36 * 获取一个演示用的简单数据集对象 37 * 38 * @return 39 */ 40 private static DefaultPieDataset getDataSet() { 41 DefaultPieDataset dataset = new DefaultPieDataset(); 42 dataset.setValue("苹果", 100); 43 dataset.setValue("梨子", 200); 44 dataset.setValue("葡萄", 300); 45 dataset.setValue("香蕉", 400); 46 dataset.setValue("荔枝", 500); 47 return dataset; 48 } 49 }
其他的图表类型暂时不写了,其实写法也差不多。这里注意两种图形的中文乱码解决方法是不一样的,具体查看源代码中的红色部分
3:将数据库的内容用图形表示出来
index.jsp
1 <body> 2 <form action="servlet/ShowChartServlet" method="get" > 3 <input type="submit" value="jfreechart访问数据库生成图表"> 4 </form> 5 </body>
showJfreeChart.jsp
1 <body> 2 <center> 3 <img alt="" src="<%=path %>/reports/productSales.jpg"> 4 </center> 5 </body>
ShowChartServlet.java
1 public class ShowChartServlet extends HttpServlet { 2 3 /** 4 * 获取一个演示用的组合数据集对象 5 * 6 * @return 7 */ 8 private static CategoryDataset getDataSet() { 9 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 10 // 从数据库中获取 11 Connection conn = null; 12 PreparedStatement ps = null; 13 ResultSet rs = null; 14 try { 15 Class.forName("com.mysql.jdbc.Driver"); // 加载驱动程序 16 conn = DriverManager 17 .getConnection( 18 "jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=utf8", 19 "root", "root"); 20 ps = conn.prepareStatement("select p.name, count(pcount) from product p join salesitem si on (p.id = si.productid) group by p.id"); 21 rs = ps.executeQuery(); 22 while (rs.next()) { 23 dataset.addValue(rs.getInt(2), "", rs.getString(1)); 24 } 25 rs.close(); 26 rs = null; 27 } catch (SQLException e) { 28 e.printStackTrace(); 29 }catch (ClassNotFoundException e) { 30 e.printStackTrace(); 31 } 32 finally { 33 if(ps != null){ 34 try { 35 ps.close(); 36 } catch (SQLException e) { 37 e.printStackTrace(); 38 } 39 } 40 if(conn != null){ 41 try { 42 conn.close(); 43 } catch (SQLException e) { 44 e.printStackTrace(); 45 } 46 } 47 48 } 49 50 return dataset; 51 } 52 53 public void doGet(HttpServletRequest request, HttpServletResponse response) 54 throws ServletException, IOException { 55 56 CategoryDataset dataset = getDataSet(); 57 JFreeChart chart = ChartFactory.createBarChart3D( 58 "产品销量图", // 图表标题 59 "产品", // 目录轴的显示标签 60 "销量", // 数值轴的显示标签 61 dataset, // 数据集 62 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 63 true, // 是否显示图例(对于简单的柱状图必须是 false) 64 false, // 是否生成工具 65 false // 是否生成 URL 链接 66 ); 67 //中文乱码 68 CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); 69 NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); 70 CategoryAxis domainAxis = categoryplot.getDomainAxis(); 71 TextTitle textTitle = chart.getTitle(); 72 textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); 73 domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); 74 domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12)); 75 numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); 76 numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12)); 77 chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 78 79 FileOutputStream fos_jpg = null; 80 try { 81 fos_jpg = new FileOutputStream("E:\\Workspaces\\MyEclipse 9\\WebProjects\\JFreeChart\\WebRoot\\reports\\productSales.jpg"); 82 ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f,chart,400,300,null); 83 String path = this.getServletContext().getContextPath(); 84 System.out.println(path+"mmmmmmmmmmm"); 85 this.getServletContext().getRequestDispatcher("/showJfreeChart.jsp").forward(request, response); 86 } finally { 87 try { 88 fos_jpg.close(); 89 } catch (Exception e) {} 90 } 91 } 92 93 }
为人:谦逊、激情、博学、审问、慎思、明辨、 笃行
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/