java利用jfreechart绘制excel
- 格式:doc
- 大小:78.00 KB
- 文档页数:16
java创建excel的常用方法
Java中创建Excel文件有多种方法,以下是一些常用的方法:
1. Apache POI库,Apache POI是一个用于读写Microsoft Office文件的开源库,可以使用它来创建和编辑Excel文件。
通过POI库,可以创建工作簿(Workbook)、工作表(Sheet)、单元格(Cell)等对象,然后填充数据并保存为Excel文件。
这是Java中
创建Excel文件最常用的方法之一。
2. JExcelApi库,JExcelApi也是一个用于操作Excel文件的
开源库,它提供了创建、读取和修改Excel文件的功能。
通过JExcelApi,可以创建工作簿、工作表,并向单元格中写入数据,最
后保存为Excel文件。
3. 使用Java的CSV库,虽然CSV文件不是真正的Excel文件,但在某些情况下也可以满足需求。
Java中有一些CSV库可以用来创
建和编辑CSV文件,例如OpenCSV和uniVocity等。
这些库可以将
数据写入CSV格式的文件,然后可以通过Excel等软件打开并保存
为Excel文件。
4. 使用第三方Excel库,除了上述提到的库外,还有一些第三
方的商业库,如Aspose.Cells,可以用来创建和编辑Excel文件。
这些库通常提供了更丰富的功能和更好的性能,但需要购买许可证。
总的来说,以上列举的方法是Java中创建Excel文件的常用方法。
选择合适的方法取决于具体的需求和项目的要求。
希望这些信
息能够帮助到你。
Java操作Excel之JXL(填充EXCEL模板)转载Java操作Excel之理解JXL--读取Excel 说到如何⽤JXL读取Excel⽂件,现在来看看如何读取Excel模板然后把动态数据写⼊到模板以⽣成特定格式的Excel。
同样的思路,先来考虑下会涉及到那些对象,和上篇⽂章读取相⽐这⾥涉及到⼀个写⼊的步骤,所以JXL必然会提供⼀个对象来⽀持写⼊,这就是WritableWorkbook。
那么如何得到到这个类的实例,查看APIDoc发现Workbook类提供了⼏个静态的createWorkbook⽅法返回WritableWorkbook实例,可以看到众多createWorkbook⽅法主要分为两类:⼀个参数和两个参数。
简单分析可以得知前者仅仅是⽤来直接⽣成Excel⽂件,后者先读取模板再向模板写⼊数据然后⽣成Excel。
(还有⼀个三参数⽅法加上⼀个⽤来设置workbook的参数)现在按照上篇⽂章中所讲述的流程来看看读取模板并写⼊需要那些步骤。
第⼀步:选择模板⽂件:Workbook wb = Workbook.getWorkbook(new File(realpath));第⼆步:通过模板得到⼀个可写的Workbook:WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);第⼀个参数是⼀个输出流对象,⽐如可以ByteArrayOutputStream targetFile = new ByteArrayOutputStream();这样定义这个输出流对象。
第⼆个参数代表了要读取的模板。
第三步:选择模板中名称为StateResult的Sheet:WritableSheet wws = wwb.getSheet("StateResult");如果需要也可以创建SheetWritableSheet wws = wwb.createSheet("Sheet名称",i);第四步:选择单元格,写⼊动态值,根据单元格的不同类型转换成相应类型的单元格:Label A1 = (Label)wws.getWritableCell(0,0);A1.setString("单元格内容")或Number A2 = (Number)wws.getWritableCell(0,1);//Number是jxl.write.NumberA2.setValue(3.3);也可以创建新的单元格并且加⼊到Sheet中Label C1 = new Label(2,0,"单元格内容");wws.addCell(C1);或Number C1 = new Number(2,0,3.3);wws.addCell(C1);在⽣成Excel报表的时候还会遇到⼀种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显⽰,⽽字符串型单元格以另⼀种格式显⽰。
关于JfreeChart柱状图,数值显示的问题关于JfreeChart柱状图,数值显示的问题你试试这句话:BarRenderer renderer=new BarRenderer();renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setBaseItemLabelsVisible(true);关于JFreeChart生成柱状图的问题,急!一个简单的方法根据PlotRenderingInfo 获得getDataArea() getPlotArea()PlotArea 包括座标轴 getDataArea 只有影象两个区域相减,左边的就是纵轴的区域。
关于Excel柱状图的问题++++57132899++++图表是通过资料位置生成的jfreechart 柱状图横轴下方的图示的排列问题:jfree./jfreechart/samples.这个是Demo。
点选web start 启动例子,里面有很多很多的例子有一个例子叫LegendWrapperDemo1.java 的那个demo 就是竖着排的。
柱中用不同颜色的也有。
我的专案中用的就是不同颜色的,在demo里的Bar Charts -Stacked的目录下都是那种例子。
我就是照那个做的。
原始码在;:sourcefe./projects/jfreechart/files/这个页面上下载。
jfreechart是开源的。
技术支援的文件是收费的怎么在jqplot 柱状图每条柱上显示数值axes: { xaxis: { label: "X 轴文字" } 看看例子就能发现啊$(document).ready(function(){ var plot2 = $.jqplot ('chart2', [[3,7,9,1,4,6,8,2,5]], { Give the plot a title. title: 'Plot With Options', You can specify options for...点“柱状图里的柱子”——右键——资料系列格式——资料标志——值(勾选)——确定java中使用jfreechart做柱状图,在jsp中显示有问题,jfreechart中显示柱状图到jsp页面:package .test.jfreechart;import java.awt.Font;import javax.swing.JPanel;import .jfree.chart.ChartFactory;import .jfree.chart.ChartPanel;import .jfree.chart.JFreeChart;import .jfree.chart.axis.CategoryAxis;import .jfree.chart.plot.CategoryPlot;import .jfree.chart.plot.PlotOrientation;import .jfree.chart.title.TextTitle;import .jfree.data.category.CategoryDataset;import .jfree.data.category.DefaultCategoryDataset;import .jfree.ui.ApplicationFrame;public class JFreeChartTest2 extends ApplicationFrame{public JFreeChartT est2(String title){super(title);this.setContentPane(createPanel()); 建构函式中自动建立Java 的panel面板}public static CategoryDataset createDataset() 建立柱状图资料集{DefaultCategoryDataset dataset=new DefaultCategoryDataset();dataset.setValue(10,"a","管理人员");dataset.setValue(20,"b","市场人员");dataset.setValue(40,"c","开发人员");dataset.setValue(15,"d","其他人员");return dataset;}public static JFreeChart createChart(CategoryDataset dataset) 用资料集建立一个图表{JFreeChart chart=ChartFactory.createBarChart("hi", "人员分布","人员数量", dataset, PlotOrientation.VERTICAL, true, true, false); 建立一个JFreeChartchart.setTitle(new TextTitle("某公司组织结构图",new Font("宋体",Font.BOLD+Font.ITALIC,20)));可以重新设定标题,替换“hi”标题CategoryPlot plot=(CategoryPlot)chart.getPlot();获得图示中间部分,即plotCategoryAxis categoryAxis=plot.getDomainAxis();获得横座标categoryAxis.setLabelFont(new Font("微软雅黑",Font.BOLD,12));设定横座标字型return chart;}public static JPanel createPanel(){JFreeChart chart =createChart(createDataset());return new ChartPanel(chart); 将chart物件放入Panel面板中去,ChartPanel类已继承Jpanel}public static void main(String[] args){JFreeChartTest2 chart=new JFreeChartTest2("某公司组织结构图");chart.pack();以合适的大小显示chart.setVisible(true);}}执行结果:java jfreechart 柱状图设定问题,求解参考答案总有一天,我会丢下我所有的疲倦和理想,带着我的相机,远离繁华,面向空旷。
代码大概三百行吧,不多。
本来连接数据库做是个不错的选择,但是我刚刷了系统木有了又懒得装,从txt输入又感觉太low,最后就作死选择了以前从未尝试过的从Excel 输入,并碰到了各种问题_(:зゝ∠)_比如Cannot get a String value from a numeric cell 的异常错误,卡了我好久,直到无语地发现POI操作Excel时会无视Excel里的单元格设置,自判数据类型,所以还要使用setCellType.(*゜ー゜*)实现步骤(1)我用javax.swing.JFileChooser类来显示文件对话框,让用户选择一个Excel文件。
(2)使用Apache POI API从Excel文件中读取数据,对Employee类进行批量初始化。
(3)实现公司员工收入的相关统计,这里我实现了人数统计、最大/最小工龄查找、最大/最小工资查找、男女比例、平均工资、平均年龄、平均工龄等。
(4)建立Dataset。
将你所想要显示的数据都放到这个库中。
(5)建立JFreeChart对象。
将你的dataset填入到这个对象中。
(6)处理Chart中文显示问题(7)设置各种JFreeChart的属性和效果。
通过它提供的各种方法和接口设置相关的属性。
(8)用JFreeChart绘制图表,然后按照个人的需求进行执行。
(9)写界面,以swing形式输出。
测试截图(1)生成消息对话框,要求用户选择一个Excel文件,单击“确定”(2)生成文件选择器,我打开了存放在D盘BUAA文件夹里的Employee.xls补充说明:这是文件Employee.xls的内容(3)进行相关统计,并通过消息对话框显示统计结果(4)询问用户是否生成统计图,如果点“取消”或“否”,运行完毕;如果点是,系统将生成统计图,以员工为横轴,以年龄、工龄、工资三项数值为纵轴。
图表的显示效果会根据窗口大小自适应,改变横纵轴的比例尺。
下面是窗口最大化的效果程序清单1 2 3 4 5 6 7 8public class Employee {String ID;String name;String sex;double age;double workAge;double sal;9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32public void setID(String ID) {this.ID = ID;}public void setName(String name) { = name;}public void setSex(String sex) {this.sex = sex;}public void setAge(double age) {this.age = age;}public void setWorkAge(double workAge) {this.workAge = workAge;}public void setSal(double sal) {this.sal = sal;}}一共有两个:Employee.Java和EmployeeStatic.javaEmployeeStatic.javaimport java.awt.RenderingHints;import java.io.FileInputStream;import java.util.ArrayList;import java.util.List;import javax.swing.JFileChooser;import javax.swing.JOptionPane;//org.apache.poiimport ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import ermodel.Cell;import ermodel.Row;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;//org.jfreeimport org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import java.awt.Font;public class EmployeeStatics {public static void main(String[] args) {// TODO Auto-generated method stubJOptionPane.showMessageDialog(null,"\n您好,我是智能机器人小紫\n\n" + "很高兴为您提供员工数据统计分析服务\n\n"+ "请选择一个Excel文件 ^_^\n\n","选择Excel文件",RMATION_MESSAGE); ArrayList<Employee> Employees = null;//从Excel文件读取数据try {Employees = ReadFileUsingFileChooser();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//人数统计int n = Employees.size();//最大最小工资、工龄、工资初始化int maxA = 0;int minA = Integer.MAX_VALUE;int maxWA = 0;int minWA = Integer.MAX_VALUE;int maxS = 0;int minS = Integer.MAX_VALUE;//男女性别人数int M = 0;int FM = 0;double sumS, sumA, sumWA, avgS, avgA, avgWA, MFM; sumS = sumA = sumWA = 0;//遍历实现相关统计for (Employee e : Employees) {if(e.age > maxA)maxA = (int) e.age;if(e.age < minA)minA = (int) e.age;if(e.workAge > maxWA)maxWA = (int) e.workAge;if(e.workAge < minWA)minWA = (int) e.workAge;if(e.sal > maxS)maxS = (int) e.sal;if(e.sal < minS)minS = (int) e.sal;sumS += e.sal;sumA += e.age;sumWA += e.workAge;if (e.sex.equals("男"))M++;if (e.sex.equals("女"))FM++;}//计算平均值avgS = sumS / n;avgA = sumA / n;avgWA = sumWA / n;//计算男女比例MFM = (double) M / FM;JOptionPane.showMessageDialog(null,"员工人数为" + n + ",男女比例为" + MFM + "(男/女)\n"+ "平均年龄为" + avgA + ",平均工龄为" + avgWA + ",平均工资为" + avgS + "\n"+ "最高年龄为" + maxA + ",最低年龄为" + minA + ",最高工龄为" + maxWA + ",最低工龄为" + minWA + "\n"+ "最高工资为" + maxS + "K,最低工资为" + minS + "K\n");int option=JOptionPane.YES_OPTION;option=JOptionPane.showConfirmDialog(null, "是否显示员工数据统计图?");if (option==JOptionPane.YES_OPTION) {CategoryDataset dataset = getDataSet(Employees);//构造chartJFreeChart chart = ChartFactory.createBarChart3D("员工数据统计图", // 图表标题"员工属性", // 目录轴的显示标签--横轴"数值", // 数值轴的显示标签--纵轴dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、true, // 是否显示图例(对于简单的柱状图必须false, // 是否生成工具false// 是否生成URL链接);//处理chart中文显示问题processChart(chart);//chart 以swing形式输出ChartFrame pieFrame = new ChartFrame("员工数据统计图", chart);pieFrame.pack();pieFrame.setVisible(true);}}public static ArrayList<Employee>ReadFileUsingFileChooser()throws Ex ception {// TODO Auto-generated method stubJFileChooser fileChooser = new JFileChooser();ArrayList temp = new ArrayList();if (fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION) {java.io.File file = fileChooser.getSelectedFile();FileInputStream fileIn = new FileInputStream(file);//根据指定的文件输入流导入Excel从而产生Workbook对象HSSFWorkbook wb0 = new HSSFWorkbook(fileIn);//获取Excel文档中的第一个表单HSSFSheet sht0 = wb0.getSheetAt(0);//对Sheet中的每一行进行迭代int r;int rowNum = sht0.getPhysicalNumberOfRows();for (r = 1; r <= rowNum; r++) {Row row = sht0.getRow(r);if (row == null) {break;}//创建实体类Employee info=new Employee();//取出当前行第1个单元格数据,并封装在info实体stuName属性上row.getCell(0).(Cell.);info.setID(row.getCell(0).getStringCellValue());info.setName(row.getCell(1).getStringCellValue());info.setSex(row.getCell(2).getStringCellValue());info.setAge(row.getCell(3).getNumericCellValue());info.setWorkAge(row.getCell(4).getNumericCellValue());info.setSal(row.getCell(5).getNumericCellValue());temp.add(info);}fileIn.close();}else {System.out.println("No file selected");}return temp;}//获取一个演示用的组合数据集对象private static CategoryDatasetgetDataSet(ArrayList<Employee> Employe es) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (Employee e : Employees){dataset.addValue(e.workAge, "工龄", );dataset.addValue(e.sal, "工资", );dataset.addValue(e.age, "年龄", );}return dataset;}//解决图表汉字显示问题private static void processChart(JFreeChart chart) {CategoryPlot plot = chart.getCategoryPlot();CategoryAxis domainAxis = plot.getDomainAxis();ValueAxis rAxis = plot.getRangeAxis();chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASI NG,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);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));rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));rAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));// renderer.setItemLabelGenerator(newLabelGenerator(0.0));// renderer.setItemLabelFont(newFont("宋体", Font.PLAIN, 12));//renderer.setItemLabelsVisible(true);}}Employee.javapublic class Employee {String ID;String name;String sex;double age;double workAge;double sal;public void setID(String ID) {this.ID = ID;}public void setName(String name) { = name;}public void setSex(String sex) {this.sex = sex;}public void setAge(double age) {this.age = age;}public void setWorkAge(double workAge) { this.workAge = workAge;}public void setSal(double sal) {this.sal = sal;}}。
java动态⽣成带下拉框的Excel导⼊模板在实际开发中,由于业务需要,常常需要进⾏Excel导⼊导出操作。
以前做⼀些简单的导⼊时,先准备⼀个模板,再进⾏导⼊,单有⼗⼏、⼆⼗⼏个导⼊模板时,往往要做⼗⼏、⼆⼗⼏个模板。
⽽且,当在模板中需要有下拉框,⽽且下拉数据要实时查询时,这样的⽅法就不太好了;现在,做成了动态⽣成导⼊模板,只要参数传对了,就可以⽣成任何我们想要的导⼊模板,⽽且随意设置下拉框的数⽬、位置。
具体步骤如下:1、需要⽤到的jar包:poi-3.10-FINAL.jarpoi-ooxml-3.10-FINAL.jarpoi-ooxml-schemas-3.10-FINAL.jargradle引⼊:compile group: 'org.apache.poi', name: 'poi', version: '3.10'compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.10-FINAL'2、⽣成Excel导⼊模板 :/*** @Title: createExcelTemplate* @Description: ⽣成Excel导⼊模板* @param@param filePath Excel⽂件路径* @param@param handers Excel列标题(数组)* @param@param downData 下拉框数据(数组)* @param@param downRows 下拉列的序号(数组,序号从0开始)* @return void* @throws*/private static void createExcelTemplate(String filePath, String[] handers,List<String[]> downData, String[] downRows){HSSFWorkbook wb = new HSSFWorkbook();//创建⼯作薄//表头样式HSSFCellStyle style = wb.createCellStyle();style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建⼀个居中格式//字体样式HSSFFont fontStyle = wb.createFont();fontStyle.setFontName("微软雅⿊");fontStyle.setFontHeightInPoints((short)12);fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);style.setFont(fontStyle);//新建sheetHSSFSheet sheet1 = wb.createSheet("Sheet1");HSSFSheet sheet2 = wb.createSheet("Sheet2");HSSFSheet sheet3 = wb.createSheet("Sheet3");//⽣成sheet1内容HSSFRow rowFirst = sheet1.createRow(0);//第⼀个sheet的第⼀⾏为标题//写标题for(int i=0;i<handers.length;i++){HSSFCell cell = rowFirst.createCell(i); //获取第⼀⾏的每个单元格sheet1.setColumnWidth(i, 4000); //设置每列的列宽cell.setCellStyle(style); //加样式cell.setCellValue(handers[i]); //往单元格⾥写数据}//设置下拉框数据String[] arr = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};int index = 0;HSSFRow row = null;for(int r=0;r<downRows.length;r++){String[] dlData = downData.get(r);//获取下拉对象int rownum = Integer.parseInt(downRows[r]);if(dlData.length<5){ //255以内的下拉//255以内的下拉,参数分别是:作⽤的sheet、下拉内容数组、起始⾏、终⽌⾏、起始列、终⽌列sheet1.addValidationData(setDataValidation(sheet1, dlData, 1, 50000, rownum ,rownum)); //超过255个报错} else { //255以上的下拉,即下拉列表元素很多的情况//1、设置有效性//String strFormula = "Sheet2!$A$1:$A$5000" ; //Sheet2第A1到A5000作为下拉列表来源数据String strFormula = "Sheet2!$"+arr[index]+"$1:$"+arr[index]+"$5000"; //Sheet2第A1到A5000作为下拉列表来源数据sheet2.setColumnWidth(r, 4000); //设置每列的列宽//设置数据有效性加载在哪个单元格上,参数分别是:从sheet2获取A1到A5000作为⼀个下拉的数据、起始⾏、终⽌⾏、起始列、终⽌列 sheet1.addValidationData(SetDataValidation(strFormula, 1, 50000, rownum, rownum)); //下拉列表元素很多的情况//2、⽣成sheet2内容for(int j=0;j<dlData.length;j++){if(index==0){ //第1个下拉选项,直接创建⾏、列row = sheet2.createRow(j); //创建数据⾏sheet2.setColumnWidth(j, 4000); //设置每列的列宽row.createCell(0).setCellValue(dlData[j]); //设置对应单元格的值} else { //⾮第1个下拉选项int rowCount = sheet2.getLastRowNum();//System.out.println("========== LastRowNum =========" + rowCount);if(j<=rowCount){ //前⾯创建过的⾏,直接获取⾏,创建列//获取⾏,创建列sheet2.getRow(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值} else { //未创建过的⾏,直接创建⾏、创建列sheet2.setColumnWidth(j, 4000); //设置每列的列宽//创建⾏、创建列sheet2.createRow(j).createCell(index).setCellValue(dlData[j]); //设置对应单元格的值}}}index++;}}try {File f = new File(filePath); //写⽂件//不存在则新增if(!f.getParentFile().exists()){f.getParentFile().mkdirs();}if(!f.exists()){f.createNewFile();}FileOutputStream out = new FileOutputStream(f);out.flush();wb.write(out);out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}3、设置有效性:/**** @Title: SetDataValidation* @Description: 下拉列表元素很多的情况 (255以上的下拉)* @param@param strFormula* @param@param firstRow 起始⾏* @param@param endRow 终⽌⾏* @param@param firstCol 起始列* @param@param endCol 终⽌列* @param@return* @return HSSFDataValidation* @throws*/private static HSSFDataValidation SetDataValidation(String strFormula,int firstRow, int endRow, int firstCol, int endCol) {// 设置数据有效性加载在哪个单元格上。
最近公司使用jfreechart来生成统计图,使用了折线图,饼图等,因为用的1.0.8a版的jfreechart,与1.0.0版本的地方有很多不同,而且图片生成清晰度比老版的高,如下是我做的demo.1.所需包(1) jfreechart-1.0.8a.jar(2) jcommon-1.0.12.jar2.运行环境JDK 1.53.源代码import java.awt.Color;import java.awt.Font;import java.io.File;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.V alueAxis;import bels.StandardCategoryItemLabelGenerator;import bels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.chart.renderer.category.StackedBarRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;/*** 实际取色的时候一定要16位的,这样比较准确** @author new*/public class CreateChartServiceImpl{private static final String CHART_PA TH = "E:/test/";public static void main(String[] args){// TODO Auto-generated method stubCreateChartServiceImpl pm = new CreateChartServiceImpl();// 生成饼状图pm.makePieChart();// 生成单组柱状图pm.makeBarChart();// 生成多组柱状图pm.makeBarGroupChart();// 生成堆积柱状图pm.makeStackedBarChart();// 生成折线图pm.makeLineAndShapeChart();}/*** 生成折线图*/public void makeLineAndShapeChart(){double[][] data = new double[][]{{ 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 },{ 332, 256, 523, 240, 526 } };String[] rowKeys ={ "苹果", "梨子", "葡萄" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createTimeXYChar("折线图", "x轴", "y轴", dataset, "lineAndShap.png"); }/*** 生成分组的柱状图*/public void makeBarGroupChart(){double[][] data = new double[][]{ 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 },{ 332, 256, 523, 240, 526 } };String[] rowKeys ={ "苹果", "梨子", "葡萄" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createBarChart(dataset, "x坐标", "y坐标", "柱状图", "barGroup.png");}/*** 生成柱状图*/public void makeBarChart(){double[][] data = new double[][]{{ 672, 766, 223, 540, 126 } };String[] rowKeys ={ "苹果" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createBarChart(dataset, "x坐标", "y坐标", "柱状图", "bar.png");}/*** 生成堆栈柱状图*/public void makeStackedBarChart(){double[][] data = new double[][]{{ 0.21, 0.66, 0.23, 0.40, 0.26 },{ 0.25, 0.21, 0.10, 0.40, 0.16 } };String[] rowKeys ={ "苹果", "梨子" };String[] columnKeys ={ "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys); createStackedBarChart(dataset, "x坐标", "y坐标", "柱状图", "stsckedBar.png"); }/*** 生成饼状图*/public void makePieChart(){double[] data ={ 9, 91 };String[] keys ={ "失败率", "成功率" };createValidityComparePimChar(getDataPieSetByUtil(data, keys), "饼状图", "pie2.png", keys);}// 柱状图,折线图数据集public CategoryDataset getBarData(double[][] data, String[] rowKeys, String[] columnKeys){return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);}// 饼状图数据集public PieDataset getDataPieSetByUtil(double[] data,String[] datadescription){if (data != null && datadescription != null){if (data.length == datadescription.length){DefaultPieDataset dataset = new DefaultPieDataset();for (int i = 0; i < data.length; i++){dataset.setValue(datadescription[i], data[i]);}return dataset;}}return null;/*** 柱状图**@param dataset 数据集* @param xName x轴的说明(如种类,时间等)* @param yName y轴的说明(如速度,时间等)* @param chartTitle 图标题* @param charName 生成图片的名字* @return*/public String createBarChart(CategoryDataset dataset, String xName,String yName, String chartTitle, String charName){JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);/** V ALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,* 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看*///chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(false);chart.setBackgroundPaint(Color.white);// create plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");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(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;}catch (Exception e){e.printStackTrace();return null;}finally{try{fos_jpg.close();}catch (Exception e){e.printStackTrace();}}/*** 横向图** @param dataset 数据集* @param xName x轴的说明(如种类,时间等)* @param yName y轴的说明(如速度,时间等)* @param chartTitle 图标题* @param charName 生成图片的名字* @return*/public String createHorizontalBarChart(CategoryDataset dataset,String xName, String yName, String chartTitle, String charName){JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);CategoryPlot plot = chart.getCategoryPlot();// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();//设置刻度必须从0开始// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的// LableFont labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值domainAxis.setMaximumCategoryLabelWidthRatio(0.8f);// 横轴上的Lable 是否完整显示// domainAxis.setVerticalCategoryLabels(false);plot.setDomainAxis(domainAxis);ValueAxis rangeAxis = plot.getRangeAxis();// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.03);// 设置柱子高度renderer.setMinimumBarLength(30);renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱的颜色renderer.setSeriesPaint(0, Color.GREEN);renderer.setSeriesPaint(1, new Color(0, 0, 255));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.5);// 显示每个柱的数值,并修改该数值的字体属性renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); // 设置柱的数值可见renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(0.6f);FileOutputStream fos_jpg = null;try{isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;}catch (Exception e){e.printStackTrace();return null;}finally{try{fos_jpg.close();}catch (Exception e){e.printStackTrace();}}}/*** 饼状图** @param dataset 数据集* @param chartTitle 图标题* @param charName 生成图的名字* @param pieKeys 分饼的名字集* @return*/public String createValidityComparePimChar(PieDataset dataset,String chartTitle, String charName, String[] pieKeys){JFreeChart chart = ChartFactory.createPieChart3D(chartTitle, // chart// titledataset,// datatrue,// include legendtrue, false);// 使下说明标签字体清晰,去锯齿类似于//chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);的效果chart.setTextAntiAlias(false);// 图片背景色chart.setBackgroundPaint(Color.white);// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);PiePlot3D plot = (PiePlot3D) chart.getPlot();// 图片中显示百分比:默认方式// 指定饼图轮廓线的颜色// plot.setBaseSectionOutlinePaint(Color.BLACK);// plot.setBaseSectionPaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。
java cellstyle的用法在Java中,CellStyle是Apache POI库中的一个类,用于定义和设置Excel单元格的样式。
CellStyle对象可以通过Workbook对象的createCellStyle()方法来创建。
CellStyle对象可以通过以下方法来设置和获取单元格的样式:1. setFont(Font font):设置单元格的字体。
2. setAlignment(HorizontalAlignment alignment):设置单元格的水平对齐方式。
3. setVerticalAlignment(VerticalAlignment alignment):设置单元格的垂直对齐方式。
4. setBorder(BorderStyle border, short color):设置单元格的边框样式和颜色。
5. setFillPattern(FillPatternType pattern):设置单元格的填充模式。
6. setFillForegroundColor(IndexedColors color):设置单元格的填充前景色。
7. setDataFormat(short format):设置单元格的数据格式。
8. setWrapText(boolean wrapText):设置单元格文本是否自动换行。
9. setHidden(boolean hidden):设置单元格是否隐藏。
10. setLocked(boolean locked):设置单元格是否锁定。
拓展:CellStyle不仅可以应用于单个单元格,还可以应用于整个列或行。
可以通过Sheet对象的createRow(int rownum)和getRow(int rownum)方法创建行对象,然后通过Row对象的createCell(int column)和getCell(int column)方法创建和获取单元格对象。
java通过FreeMarker模板⽣成Excel⽂件之.ftl模板制作关于怎么通过freemarker模板⽣成excel的⽂章很多,关键点在于怎么制作模板⽂件.ftl⽹上的办法是:(1)把Excel模板的格式调好,另存为xml⽂件(2)新建⼀个.ftl⽂件,把xml⽂件内容copy进去,把变量换成FreeMarker的插值当然可⾏,但是这样制作的.ftl⽂件偏⼤,可读性很低我是这样制作的,直接写HTML标签<table><thead><tr><td>资产端简称</td><td>放款⾦额(元)</td><td>账单⽉份</td><td>UZY服务费(元)</td><td>账单状态</td></tr></thead><tbody><#list dataList as data><tr><td>${(data.assetName)!""}</td><td>${(data.loanAmount?string('0.00'))!""}</td><td>${(data.billMonth)!""}</td><td>${(data.uzyServiceFee?string('0.00'))!""}</td><td>${(data.statusName)!""}</td></tr></#list></tbody></table>简单吧,效果如下后台部分代码:private void exportToXls(String templateName, String fileName, Map<String, Object> dataMap, HttpServletResponse response) {Configuration configuration = new Configuration();configuration.setEncoding(Locale.CHINA, "UTF-8");configuration.setDefaultEncoding("UTF-8");configuration.setClassForTemplateLoading(this.getClass(), "/templates");String downloadFileName;try {downloadFileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");} catch (UnsupportedEncodingException e) {logger.warn("encode error", e);downloadFileName = DateUtil.format(new Date());}response.setContentType("application/ms-excel");response.setCharacterEncoding("UTF-8");response.setHeader("Content-disposition", "attachment; filename=" + downloadFileName + ".xls");try {Template template = configuration.getTemplate(templateName);template.process(dataMap, response.getWriter());} catch (Exception e) {logger.warn("export report error", e);}}。
java报表方案随着信息技术的发展,企业对数据分析和报表呈现的需求也越来越高。
作为一种功能强大的编程语言,Java在企业级数据分析报表方案中扮演着重要的角色。
本文将介绍Java在报表方案中的应用,并探讨几种常用的Java报表工具和框架。
一、Java在报表方案中的应用1. 数据抽取和准备在报表方案中,首先需要进行数据抽取和准备工作。
Java提供了丰富的API和开发工具,可以方便地从各种数据源中提取和处理数据。
例如,可以通过JDBC连接数据库,使用Java的相关库进行数据操作和转换,以满足不同数据源的需求。
2. 报表设计和布局报表的设计和布局是保证报表可读性和美观的重要环节。
Java提供了多种可视化框架,例如Swing、JavaFX等,可以用于构建灵活和美观的报表界面。
开发人员可以根据需求设计各种样式和布局,以满足不同的报表展示要求。
3. 数据分析和计算报表的核心任务是对数据进行分析和计算,以便为企业提供决策支持。
Java提供了丰富的数学计算和统计分析库,例如Apache CommonsMath、Jama等,可以方便地进行各种数据分析和计算操作。
开发人员可以根据具体需求选择合适的库进行数据处理和分析。
4. 报表呈现和导出Java对报表的呈现和导出也提供了丰富的支持。
开发人员可以使用Java的打印API将报表直接打印出来,或者将报表导出成各种格式,例如PDF、Excel、HTML等,以方便用户进行查阅和共享。
二、常用的Java报表工具和框架1. JasperReportsJasperReports是一个功能强大的开源报表工具,它基于Java开发,并提供了丰富的特性和灵活的报表设计能力。
JasperReports支持多种数据源,可以将报表导出成多种格式。
开发人员可以使用JasperReports 的API来生成和呈现报表,还可以通过JasperServer进行报表的分发和管理。
2. BIRTBIRT(Business Intelligence and Reporting Tools)是Eclipse基金会推出的一个开源报表工具,它提供了一个功能完善的报表设计和运行环境。
需要导包:jfreechart-1.0.8a.jar和jcommon-1.0.12.jar建一个java类CreateChartServiceImpl 类定义如下单独运行此类在e:\test下看图片效果剩下的自己改吧package Excel.tools;import java.awt.Color;import java.awt.Font;import java.io.File;import java.io.FileOutputStream;import java.text.DecimalFormat;import java.text.NumberFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.axis.V alueAxis;import bels.StandardCategoryItemLabelGenerator; import bels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot3D;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.LineAndShapeRenderer; import org.jfree.chart.renderer.category.StackedBarRenderer; import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.general.DatasetUtilities;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;/*** 实际取色的时候一定要16位的,这样比较准确** @author new*/public class CreateChartServiceImpl {private static final String CHART_PATH = "E:/test/";public static void main(String[] args) {// TODO Auto-generated method stubCreateChartServiceImpl pm = new CreateChartServiceImpl();// 生成饼状图pm.makePieChart();// 生成单组柱状图pm.makeBarChart();// 生成多组柱状图pm.makeBarGroupChart();// 生成堆积柱状图pm.makeStackedBarChart();// 生成折线图pm.makeLineAndShapeChart();}/*** 生成折线图*/public void makeLineAndShapeChart() {double[][] data = new double[][] { { 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 }, { 332, 256, 523, 240, 526 } };String[] rowKeys = { "苹果", "梨子", "葡萄" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createTimeXYChar("折线图", "x轴", "y轴", dataset, "lineAndShap.jpg"); }/*** 生成分组的柱状图*/public void makeBarGroupChart() {double[][] data = new double[][] { { 672, 766, 223, 540, 126 },{ 325, 521, 210, 340, 106 }, { 332, 256, 523, 240, 526 } };String[] rowKeys = { "苹果", "梨子", "葡萄" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createBarChart(dataset, "x坐标", "y坐标", "柱状图", "barGroup.png"); }/*** 生成柱状图*/public void makeBarChart() {double[][] data = new double[][] { { 672, 766, 223, 540, 126 } };String[] rowKeys = { "苹果" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createBarChart(dataset, "x坐标", "y坐标", "柱状图", "bar.png");}/*** 生成堆栈柱状图*/public void makeStackedBarChart() {double[][] data = new double[][] { { 0.21, 0.66, 0.23, 0.40, 0.26 },{ 0.25, 0.21, 0.10, 0.40, 0.16 } };String[] rowKeys = { "苹果", "梨子" };String[] columnKeys = { "北京", "上海", "广州", "成都", "深圳" };CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);createStackedBarChart(dataset, "x坐标", "y坐标", "柱状图", "stsckedBar.png"); }/*** 生成饼状图*/public void makePieChart() {double[] data = { 9, 91 };String[] keys = { "失败率", "成功率" };createValidityComparePimChar(getDataPieSetByUtil(data, keys), "饼状图", "pie2.png", keys);}// 柱状图,折线图数据集public CategoryDataset getBarData(double[][] data, String[] rowKeys,String[] columnKeys) {return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);}// 饼状图数据集public PieDataset getDataPieSetByUtil(double[] data,String[] datadescription) {if (data != null && datadescription != null) {if (data.length == datadescription.length) {DefaultPieDataset dataset = new DefaultPieDataset();for (int i = 0; i < data.length; i++) {dataset.setValue(datadescription[i], data[i]);}return dataset;}}return null;}/*** 柱状图**@param dataset* 数据集* @param xName* x轴的说明(如种类,时间等)* @param yName* y轴的说明(如速度,时间等)* @param chartTitle* 图标题* @param charName* 生成图片的名字* @return*/public String createBarChart(CategoryDataset dataset, String xName,String yName, String chartTitle, String charName) {JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是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.white);// create plotCategoryPlot plot = chart.getCategoryPlot();// 设置横虚线可见plot.setRangeGridlinesVisible(true);// 虚线色彩plot.setRangeGridlinePaint(Color.gray);// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");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(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;} catch (Exception e) {e.printStackTrace();return null;} finally {try {fos_jpg.close();} catch (Exception e) {e.printStackTrace();}}}/*** 横向图** @param dataset* 数据集* @param xName* x轴的说明(如种类,时间等)* @param yName* y轴的说明(如速度,时间等)* @param chartTitle* 图标题* @param charName* 生成图片的名字* @return*/public String createHorizontalBarChart(CategoryDataset dataset,String xName, String yName, String chartTitle, String charName) { JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题xName, // 目录轴的显示标签yName, // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);CategoryPlot plot = chart.getCategoryPlot();// 数据轴精度NumberAxis vn = (NumberAxis) plot.getRangeAxis();// 设置刻度必须从0开始// vn.setAutoRangeIncludesZero(true);DecimalFormat df = new DecimalFormat("#0.00");vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式CategoryAxis domainAxis = plot.getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的// LableFont labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);domainAxis.setLabelFont(labelFont);// 轴标题domainAxis.setTickLabelFont(labelFont);// 轴数值domainAxis.setMaximumCategoryLabelWidthRatio(0.8f);// 横轴上的Lable 是否完整显示// domainAxis.setVerticalCategoryLabels(false);plot.setDomainAxis(domainAxis);ValueAxis rangeAxis = plot.getRangeAxis();// 设置最高的一个Item 与图片顶端的距离rangeAxis.setUpperMargin(0.15);// 设置最低的一个Item 与图片底端的距离rangeAxis.setLowerMargin(0.15);plot.setRangeAxis(rangeAxis);BarRenderer renderer = new BarRenderer();// 设置柱子宽度renderer.setMaximumBarWidth(0.03);// 设置柱子高度renderer.setMinimumBarLength(30);renderer.setBaseOutlinePaint(Color.BLACK);// 设置柱的颜色renderer.setSeriesPaint(0, Color.GREEN);renderer.setSeriesPaint(1, new Color(0, 0, 255));// 设置每个地区所包含的平行柱的之间距离renderer.setItemMargin(0.5);// 显示每个柱的数值,并修改该数值的字体属性renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());// 设置柱的数值可见renderer.setBaseItemLabelsVisible(true);plot.setRenderer(renderer);// 设置柱的透明度plot.setForegroundAlpha(0.6f);FileOutputStream fos_jpg = null;try {isChartPathExist(CHART_PATH);String chartName = CHART_PA TH + charName;fos_jpg = new FileOutputStream(chartName);ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500, 500, true, 10);return chartName;} catch (Exception e) {e.printStackTrace();return null;} finally {try {fos_jpg.close();} catch (Exception e) {e.printStackTrace();}}}/*** 饼状图** @param dataset* 数据集* @param chartTitle* 图标题* @param charName* 生成图的名字* @param pieKeys* 分饼的名字集* @return*/public String createValidityComparePimChar(PieDataset dataset,String chartTitle, String charName, String[] pieKeys) {JFreeChart chart = ChartFactory.createPieChart3D(chartTitle, // chart// titledataset,// datatrue,// include legendtrue, false);// 使下说明标签字体清晰,去锯齿类似于//chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.V ALUE_TEXT_ANTIALIAS_OFF);的效果chart.setTextAntiAlias(false);// 图片背景色chart.setBackgroundPaint(Color.white);// 设置图标题的字体重新设置titleFont font = new Font("隶书", Font.BOLD, 25);TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);PiePlot3D plot = (PiePlot3D) chart.getPlot();// 图片中显示百分比:默认方式// 指定饼图轮廓线的颜色// plot.setBaseSectionOutlinePaint(Color.BLACK);// plot.setBaseSectionPaint(Color.BLACK);// 设置无数据时的信息plot.setNoDataMessage("无对应的数据,请重新查询。