- 浏览: 322270 次
- 性别:
- 来自: 福建
文章分类
最新评论
-
wangyonglin1123:
完美解决 谢谢您
BufferedReader中文乱码解决 -
wangyonglin1123:
StringBuilder result = new Stri ...
BufferedReader中文乱码解决 -
u011110982:
楼主,代码呢?
PKI体系简易JAVA实现(一):时间戳服务器TSA -
WangSongYuan:
我也遇到楼主一样的问题 果然在<body>后面填一 ...
Extjs IE8 对象不支持此属性或方法的bug -
ocaicai:
https://gist.github.com/wendal/ ...
JAVA获取方法参数名的分析(二)
jfreechart 写道
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
要使用JFreeChart , 只需要导入2个包, jcommon-xxx.jar 和 jfreechart-xxx.jar
这里我只使用jfreechart的3种图,分别是饼状图,柱状图,折线图。代码中提供了jfreechart的2种图表导出方式,一种是直接导出到本地磁盘形成图片,另一种是与struts2结合,直接联入页面中。
代码的结构为:
JFreeChartTest ==src ==action ==BarAction.java //柱状图 ==LineAction.java //折线图 ==PieAction.java //饼状图 ==createchart ==CreatePieBarChart.java //饼状图 ==CreatePieBarChart.java //饼状图 ==CreatePieBarChart.java //饼状图 ==pojo ==dao和pojo //数据源 ==struts.xml ==hibernate.cfg.xml ==struts.properties ==页面
BarAction.java
public class BarAction extends ActionSupport{ private JFreeChart chart; public JFreeChart getChart() { JfreechartDAO jfcDAO = new JfreechartDAO(); List allList = jfcDAO.findAll(); CreateBarChart cpc = new CreateBarChart("水果图", allList, "D:/"); chart = cpc.createBar(); return chart; //用于在页面上显示 } }
另外2个action和上面的类似
CreateBarChart.java 柱状图
public class CreateBarChart { /** * 标题 */ private String title; /** * 生成的图片的存储路径 */ private final String SAVE_PATH; /** * 数据源 */ private List dataSource; public CreateBarChart(String title, List dataSource, final String savePath){ this.title = title; this.dataSource = dataSource; this.SAVE_PATH = savePath; } /** * 柱状图 */ public JFreeChart createBar() { JFreeChart chart = ChartFactory.createBarChart(this.title, // 图表标题 "水果种类", // 目录轴的显示标签 "数量", // 数值轴的显示标签 this.getDateset(this.dataSource), // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 false, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 ); Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12); /* * VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭, * 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看 */ // chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); chart.setTextAntiAlias(false); chart.setBackgroundPaint(Color.gray); chart.getTitle().setFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12)); // create plot CategoryPlot plot = chart.getCategoryPlot(); // 设置横虚线可见 plot.setRangeGridlinesVisible(true); // 虚线色彩 plot.setRangeGridlinePaint(Color.gray); // 数据轴精度 NumberAxis vn = (NumberAxis) plot.getRangeAxis(); // vn.setAutoRangeIncludesZero(true); DecimalFormat df = new DecimalFormat("#0"); vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式 // x轴设置 CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setLabelFont(labelFont);// 轴标题 domainAxis.setTickLabelFont(labelFont);// 轴数值 // Lable(Math.PI/3.0)度倾斜 // domainAxis.setCategoryLabelPositions(CategoryLabelPositions // .createUpRotationLabelPositions(Math.PI / 3.0)); domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示 // 设置距离图片左端距离 domainAxis.setLowerMargin(0.1); // 设置距离图片右端距离 domainAxis.setUpperMargin(0.1); // 设置 columnKey 是否间隔显示 // domainAxis.setSkipCategoryLabelsToFit(true); plot.setDomainAxis(domainAxis); // 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确) plot.setBackgroundPaint(new Color(255, 255, 204)); // y轴设置 ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setLabelFont(labelFont); rangeAxis.setTickLabelFont(labelFont); // 设置最高的一个 Item 与图片顶端的距离 rangeAxis.setUpperMargin(0.15); // 设置最低的一个 Item 与图片底端的距离 rangeAxis.setLowerMargin(0.15); plot.setRangeAxis(rangeAxis); BarRenderer renderer = new BarRenderer(); // 设置柱子宽度 renderer.setMaximumBarWidth(0.05); // 设置柱子高度 renderer.setMinimumBarLength(0.2); // 设置柱子边框颜色 renderer.setBaseOutlinePaint(Color.BLACK); // 设置柱子边框可见 renderer.setDrawBarOutline(true); // // 设置柱的颜色 renderer.setSeriesPaint(0, new Color(204, 255, 255)); renderer.setSeriesPaint(1, new Color(153, 204, 255)); renderer.setSeriesPaint(2, new Color(51, 204, 204)); // 设置每个地区所包含的平行柱的之间距离 renderer.setItemMargin(0.0); // 显示每个柱的数值,并修改该数值的字体属性 renderer.setIncludeBaseInRange(true); renderer .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); plot.setRenderer(renderer); // 设置柱的透明度 plot.setForegroundAlpha(1.0f); FileOutputStream fos_jpg = null; try { isChartPathExist(this.SAVE_PATH); String chartName = SAVE_PATH + "bar.jpg"; fos_jpg = new FileOutputStream(chartName); ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 300, true, 10); return chart; } catch (Exception e) { e.printStackTrace(); return null; } finally { try { fos_jpg.close(); System.out.println("create bar-chart."); } catch (Exception e) { e.printStackTrace(); } } } /** * 获得数据源 * @param dataSet * @return */ private CategoryDataset getDateset(List dataSet){ DefaultCategoryDataset dataset = new DefaultCategoryDataset(); Jfreechart jfc = new Jfreechart(); for(int i = 0; i < dataSet.size(); i++){ jfc = (Jfreechart) dataSet.get(i); dataset.addValue(jfc.getAmount(),"", jfc.getName()); } return dataset; } /** * 判断文件夹是否存在,如果不存在则新建 * @param chartPath */ private void isChartPathExist(String chartPath) { File file = new File(chartPath); if (!file.exists()) { file.mkdirs(); // log.info("CHART_PATH="+CHART_PATH+"create."); } } }
CreateLineChart.java 折线图
public class CreateLineChart { /** * 标题 */ private String title; /** * 生成的图片的存储路径 */ private final String SAVE_PATH; /** * 数据源 */ private List dataSource; public CreateLineChart(String title, List dataSource, final String savePath){ this.title = title; this.dataSource = dataSource; this.SAVE_PATH = savePath; } public JFreeChart createLine(){ JFreeChart chart = ChartFactory.createLineChart(title, "序号", "数量", this.getDateset(this.dataSource), PlotOrientation.VERTICAL, false, false, false); chart.setTextAntiAlias(false); chart.setBackgroundPaint(Color.WHITE); // 设置图标题的字体重新设置title Font font = new Font("SansSerif", Font.BOLD, 25); TextTitle xtitle = new TextTitle(title); xtitle.setFont(font); chart.setTitle(xtitle); // 设置面板字体 Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12); chart.setBackgroundPaint(Color.WHITE); CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); // x轴 // 分类轴网格是否可见 categoryplot.setDomainGridlinesVisible(true); // y轴 //数据轴网格是否可见 categoryplot.setRangeGridlinesVisible(true); categoryplot.setRangeGridlinePaint(Color.WHITE);// 虚线色彩 categoryplot.setDomainGridlinePaint(Color.WHITE);// 虚线色彩 categoryplot.setBackgroundPaint(Color.lightGray); // 设置轴和面板之间的距离 // categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); CategoryAxis domainAxis = categoryplot.getDomainAxis(); domainAxis.setLabelFont(labelFont);// 轴标题 domainAxis.setTickLabelFont(labelFont);// 轴数值 domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的 // Lable // 45度倾斜 // 设置距离图片左端距离 domainAxis.setLowerMargin(0.0); // 设置距离图片右端距离 domainAxis.setUpperMargin(0.0); // y轴设置 ValueAxis rangeAxis = categoryplot.getRangeAxis(); rangeAxis.setLabelFont(labelFont); rangeAxis.setTickLabelFont(labelFont); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); numberaxis.setAutoRangeIncludesZero(true); // 获得renderer 注意这里是下嗍造型到lineandshaperenderer!! LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot .getRenderer(); lineandshaperenderer.setBaseShapesVisible(true); // series 点(即数据点)可见 lineandshaperenderer.setBaseLinesVisible(true); // series 点(即数据点)间有连线可见 // 显示折点数据 // lineandshaperenderer.setBaseItemLabelGenerator(new // StandardCategoryItemLabelGenerator()); // lineandshaperenderer.setBaseItemLabelsVisible(true); FileOutputStream fos_jpg = null; try { isChartPathExist(SAVE_PATH); String chartName = SAVE_PATH + "linePicture.jpg"; fos_jpg = new FileOutputStream(chartName); // 将报表保存为png文件 ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 400); return chart; } catch (Exception e) { e.printStackTrace(); return null; } finally { try { fos_jpg.close(); System.out.println("create time-createTimeXYChar."); } catch (Exception e) { e.printStackTrace(); } } } /** * 获得数据源 * @param dataSet * @return */ private CategoryDataset getDateset(List dataSet){ DefaultCategoryDataset dataset = new DefaultCategoryDataset(); Jfreechart jfc = new Jfreechart(); for(int i = 0; i < dataSet.size(); i++){ jfc = (Jfreechart) dataSet.get(i); dataset.addValue(jfc.getAmount(),"", jfc.getName()); } return dataset; } /** * 判断文件夹是否存在,如果不存在则新建 * @param chartPath */ private void isChartPathExist(String chartPath) { File file = new File(chartPath); if (!file.exists()) { file.mkdirs(); // log.info("CHART_PATH="+CHART_PATH+"create."); } }
CreatePieChart.java 饼状图
public class CreatePieChart { /** * 标题 */ private String title; /** * 生成的图片的存储路径 */ private final String SAVE_PATH; /** * 数据源 */ private List dataSource; public CreatePieChart(String title, List dataSource, final String savePath){ this.title = title; this.dataSource = dataSource; this.SAVE_PATH = savePath; } /** * 生成饼状图 * @param dataSet * @return */ public JFreeChart createPie(){ JFreeChart chart = ChartFactory.createPieChart3D(this.title, this.getDateset(this.dataSource), true, true, false); chart.setTextAntiAlias(false); chart.setBackgroundPaint(Color.gray); Font font = new Font("SansSerif", Font.BOLD, 18); TextTitle xtitle = new TextTitle(this.title); xtitle.setFont(font); chart.setTitle(xtitle); PiePlot3D plot = (PiePlot3D) chart.getPlot(); plot.setNoDataMessage("没有数据"); plot.setNoDataMessagePaint(Color.red); // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位 plot.setLabelGenerator((PieSectionLabelGenerator) new StandardPieSectionLabelGenerator( "{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator( "{0}={1}({2})")); //解决图片编码 plot.setLabelFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12)); //解决图例编码 chart.getLegend().setItemFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12)); plot.setForegroundAlpha(0.7f); FileOutputStream fos_jpg = null; try { // 文件夹不存在则创建 this.isChartPathExist(SAVE_PATH); fos_jpg = new FileOutputStream(SAVE_PATH + "piePicture.jpg"); // 高宽的设置影响椭圆饼图的形状 ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 300); return chart; } catch (Exception e) { e.printStackTrace(); return null; } finally { try { fos_jpg.close(); System.out.println("create pie-chart."); } catch (Exception e) { e.printStackTrace(); } } } /** * 获得数据源 * @param dataSet * @return */ private PieDataset getDateset(List dataSet){ DefaultPieDataset dataset = new DefaultPieDataset(); Jfreechart jfc = new Jfreechart(); for(int i = 0; i < dataSet.size(); i++){ jfc = (Jfreechart) dataSet.get(i); dataset.setValue(jfc.getName(), jfc.getAmount()); } return dataset; } /** * 判断文件夹是否存在,如果不存在则新建 * @param chartPath */ private void isChartPathExist(String chartPath) { File file = new File(chartPath); if (!file.exists()) { file.mkdirs(); // log.info("CHART_PATH="+CHART_PATH+"create."); } }
struts.xml
<package name="com.jfreechart" extends="jfreechart-default"> <action name="pie" class="action.PieAction"> <result type="chart"> <param name="width">600</param> <param name="height">450</param> </result> </action> <action name="bar" class="action.BarAction"> <result type="chart"> <param name="width">600</param> <param name="height">450</param> </result> </action> <action name="line" class="action.LineAction"> <result type="chart"> <param name="width">600</param> <param name="height">450</param> </result> </action> </package>
TestJfreeChart.jsp
<body> <img src="bar.do" /> <img src="pie.do" /> <img src="line.do" /> </body>
发表评论
-
JVM 垃圾回收机制与GC性能调优
2011-11-14 10:00 1260一篇还不错的分析。网上可查到很多转载,原文系谁所作已不可 ... -
事务相关总结记录
2011-09-21 16:35 1272查问题过程中,仅对一些东西做下记载。 在总体事务结束前 ... -
JAVA远程调试tomcat、WebSphere
2011-08-04 11:35 5909习惯于直接在eclipse里对 ... -
Ubuntu11.04Server64安装websphere mq 64位
2011-07-18 15:07 2752环境: Ubuntu-11.04-Server-64位 ... -
《Java Collections Framework》文摘及总结
2011-07-11 18:32 01. * The Collection interfa ... -
Maven eclipse debug
2011-04-12 15:24 1077mvn -Dwtpversion=2.0 eclipse:ec ... -
for和Iterator比较
2011-01-21 13:05 1803小记: 2种方式的速度和被操作数据集的类型有关系。 ... -
Appfuse所加载的jar包的作用
2010-06-30 10:50 0最近想深入学习下Appfuse框架。从官网上下了一个Sprin ... -
Ant propertyregex无返回值的问题
2010-05-31 15:58 4262<propertyregex property=&quo ... -
JAVA获取方法参数名的分析(二)
2010-05-13 14:29 80042010年5月13日 魏超 上一节:JAVA获取方法参 ... -
JAVA获取方法参数名的分析(一)
2010-05-13 10:09 138592010-5-12 魏超 关于题目 首先解 ... -
spring配置文件中对bean的id和name设置的区别
2010-05-11 10:32 1967我一直认为spirng的bean只能配置一个Id. 事实上,b ... -
关于子类和父类实现同一个接口
2010-05-04 11:20 5250这个问题是由下面的代码引出的: public c ... -
轻量级缓存 EhCache 简介
2010-04-26 10:29 1645转载自:http://blog.csdn.net/teed ... -
使用statCVS
2010-01-12 16:04 1510现在的项目里用CVS做版 ... -
Collection和Collections的区别
2009-10-19 16:37 1427Collection是个java.util下的接口,它是各种集 ... -
sleep和wait的区别
2009-10-19 16:34 61461、这两个方法来自不同的类分别是Thread和Object ... -
Apache、Tomcat、JBoss、WebLogic的区别与关系
2009-10-19 16:20 10954Apache全球应用最广泛的http服务器,免费,出自ap ... -
BufferedReader中文乱码解决
2009-10-15 11:00 70445做一个从windows cmd截获命令返回值的java程序,结 ... -
Swing Synth外观定制UI
2009-10-14 13:44 1803本文将深入透视 Synth 外 ...
相关推荐
通过以上介绍,你应该对JFreeChart有了初步的认识。实际操作时,结合提供的实例,你会发现JFreeChart是一个功能丰富且易于使用的图表库。不断探索和实践,你将能够充分利用它来实现各种复杂的数据可视化需求。记住,...
《JFreeChart实战:深入解析官网DEMO及源代码》 ...通过以上的讲解,相信读者对JFreeChart已经有了初步的了解。实际操作DEMO并研究源代码,将使你对这个强大的图表库有更深入的认识,从而更好地应用于实际项目。
在使用JFreeChart与JSP结合时,可能会遇到一个常见问题:使用JFreeChart生成的图片虽然已经存在于Tomcat的临时目录(\Tomcat 6.0\temp),但在浏览器中却无法正常显示,只出现一个红色的叉号。这个问题困扰了很多...
**JFreeChart 1.0 教程** JFreeChart 是一个开源的 Java 图形库,...通过以上内容,你应该对 JFreeChart 1.0 有了初步的认识,继续深入实践和探索,你会发现它的强大功能和灵活性,能够满足各种复杂的数据可视化需求。
**JFreeChart学习笔记**...通过上述内容,你应该对JFreeChart有了初步了解,可以开始尝试创建自己的图表。在实际操作中,查阅JFreeChart的官方文档和示例代码会更有利于掌握其精髓。祝你在数据可视化领域取得更多成就!
提供的代码片段展示了如何使用JOptionPane显示消息对话框,以及如何读取Excel文件并进行初步的数据处理。`ReadFileUsingFileChooser()`方法应该是用于读取Excel文件并创建`Employee`对象列表的部分。 8. **运行...
**JFreeChart 入门教程** ...通过这个 JFreeChart 入门教程,你应该对如何使用 JFreeChart 创建和自定义图表有了初步了解。继续深入实践,你将能够熟练地利用 JFreeChart 实现各种复杂的图表需求。
通过以上讲解,你应该对JFreeChart的基本用法有了初步了解。阅读提供的文档,如"JFreeChart中柱状图的详细设置.doc",将有助于进一步掌握柱状图的高级定制技巧。不断实践和探索,你将能够充分利用JFreeChart创建出...
1. **JFreeChart库的使用**:首先,你需要了解如何引入JFreeChart库到你的项目中,并掌握其API的使用方法,例如创建图表对象、设置数据、定义图表样式等。 2. **3D饼状图的创建**:JFreeChart支持2D和3D饼图,3D...
在数据分析的最后,我们可以对数据进行可视化,例如使用 JFreeChart 库来绘制图表。我们可以对数据进行排名,例如,对图书评论人数和评分进行排名,以便更好地了解数据的分布情况。 豆瓣图书数据分析是一个复杂的...
本系统是一个完整的JSP-JAVA应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。 系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出优秀的JSP应用系统。 本系统是Web模式的股票信息管理系统 ...
本系统是一个完整的JSP-JAVA应用项目,合适有初步JSP编程经验的朋友们提高和学习之用。 系统含全套源码,合适朋友们在此基础上举一反三结合实际开发出优秀的JSP应用系统。 本系统是Web模式的股票信息管理系统 ...
在开发过程中,开发者最初考虑使用JFreeChart来生成数据统计图表,但最终决定采用Flex。这一转变主要基于对图表外观质量的考量。JFreeChart生成的图像可能在某些情况下显得不够精致或专业,而Flex作为Adobe公司推出...
1 Tomcat服务器 2 eclipse集成开发环境 3 JS讲义 ...5 CSS01讲义 6 servle技术初步入门 7 servle核心技术 8 JSP技术初步入门 9 JSP核心技术与应用 10 JSTL技术介绍 ...专题 JFreeChart技术 专题 Ibatis技术
- **jFreeChart**:虽然jFreeChart主要是一个图表库,但也可以用于生成条形码,特别是Code 128和Code 39。 2. **使用ZXing生成条码** 首先,你需要在项目中引入ZXing库。然后,你可以创建一个`BitMatrix`对象,将...
8. **数据验证**:前端使用JavaScript进行初步的数据验证,后端利用Java验证业务规则,防止无效数据进入系统。 9. **安全机制**:包括用户认证和授权,通常使用Spring Security或Apache Shiro框架来实现,确保只有...
在"plant_flowsheet_interface"中,开发者很可能使用了诸如Sketch、Adobe XD或Figma等设计工具来创建初步的界面布局,然后将其转化为可交互的Java应用程序。这样的设计流程有助于确保最终产品符合用户的操作习惯,...
下位机负责数据的采集和初步处理,而上位机则负责数据的进一步处理、存储以及控制命令的发送。具体实现包括: - **下位机**:使用ADI公司的ADuC7026微控制器采集环境数据,并通过Max232芯片将数据发送至上位机。 - ...