当前位置: 代码迷 >> 报表 >> jfreechart表格,事例是其他人的
  详细解决方案

jfreechart表格,事例是其他人的

热度:138   发布时间:2016-04-29 02:04:39.0
jfreechart报表,事例是其他人的




java中的柱状图,饼状图等

需要jar包:
  jcommon-1.0.12.jar
  jfreechart-1.0.8.jar


运行,看到路径下的图片,会生成对应的图。
package jfree;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;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.AxisLocation;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.labels.ItemLabelAnchor;import org.jfree.chart.labels.ItemLabelPosition;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.labels.StandardPieToolTipGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer3D;import org.jfree.chart.renderer.category.CategoryItemRenderer;import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.data.general.DefaultPieDataset;import org.jfree.ui.TextAnchor;import org.jfree.util.Rotation;public class Jfreechart {	//柱状图	public static void barCharts() {		DefaultCategoryDataset dataset = new DefaultCategoryDataset();		dataset.addValue(300, "广州", "苹果");		dataset.addValue(200, "广州", "梨子");		dataset.addValue(500, "广州", "葡萄");		dataset.addValue(340, "广州", "芒果");		dataset.addValue(280, "广州", "荔枝");		dataset.addValue(null, "广州", "橘子");		/*以二维数组的形式		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=DatasetUtilities.createCategoryDataset(rowKeys, columnKeys,data);		*/		JFreeChart chart = ChartFactory.createBarChart3D("水果销售统计图", "水果", "销量", dataset, PlotOrientation.VERTICAL, //竖直显示				true, false, false);		//重新设置图标标题,改变字体		chart.setTitle(new TextTitle("水果销售统计", new Font("黑体", Font.BOLD, 20)));		//取得统计图标的第一个图例		LegendTitle legend = chart.getLegend(0);		//修改图例的字体,必须把显示图片设置为ture,否则会包空指针异常		legend.setItemFont(new Font("宋体", Font.BOLD, 20));		//获取柱状图的Plot对象		CategoryPlot plot = chart.getCategoryPlot();		//设定图表数据显示部分背景色		plot.setBackgroundPaint(Color.PINK);		//数据区的方向--用来控制数据时从左到右增长,还是从下到上增长的		plot.setOrientation(PlotOrientation.HORIZONTAL);		//分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)		plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);		//分类轴网格是否可见(竖的分割线)		plot.setDomainGridlinesVisible(false);		//数据图例和数据区的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)		plot.setRangeAxisLocation(AxisLocation.TOP_OR_LEFT);		plot.setRangeGridlinesVisible(true);		//取得横轴		CategoryAxis categoryAxis = plot.getDomainAxis();		//设置横轴显示标签的字体		categoryAxis.setLabelFont(new Font("隶书", Font.BOLD, 20));		//分类标签以45度角倾斜		categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);		//分类标签显示的字体		categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 20));		//取得纵轴		NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();		//设置纵轴显示标签的字体		numberAxis.setLabelFont(new Font("隶书", Font.BOLD, 20));		//数据轴是否反向(默认为false)		numberAxis.setInverted(false);		//数据轴的数据标签是否自动确定(默认为true)		numberAxis.setAutoTickUnitSelection(true);		//设置最高的一个柱与图片顶端的距离		numberAxis.setUpperMargin(0.2);		//numberAxis.setLowerMargin(0.2);		//设置显示小于最高一个柱的值100所有柱子,纵轴从柱子最大值-100开始显示		numberAxis.setFixedAutoRange(400);		//设置整数显示		numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());		numberAxis.setNegativeArrowVisible(true);		//设置最大值		numberAxis.setUpperBound(1000);		//设置最小值,如果小于的话不显示		numberAxis.setLowerBound(150);		//设置百分比显示		//numberAxis.setNumberFormatOverride(new DecimalFormat("0%"));		//numberAxis.setNumberFormatOverride(new DecimalFormat("0.00%"));		//设置最小显示数,小于的话会显示在中间(正负)		//numberAxis.setAutoRangeMinimumSize(1);		plot.setNoDataMessage("没有使用数据");		plot.setNoDataMessagePaint(Color.blue);		//柱子对象		BarRenderer3D renderer = new BarRenderer3D();		//设置柱子的宽度		renderer.setMaximumBarWidth(0.05);		//设置柱子的高度		renderer.setMinimumBarLength(0.2);		//设置柱子的颜色		renderer.setSeriesPaint(0, Color.GREEN);		//设置每种水果代表的柱的 边框颜色		renderer.setSeriesOutlinePaint(0, Color.BLACK);		//设置柱子边框可见		renderer.setDrawBarOutline(true);		//设置柱子默认的边框颜色,必须设置边框可见才起效		renderer.setBaseOutlinePaint(Color.BLACK);		//设置柱子的纵横背景色		renderer.setWallPaint(Color.BLUE);		//设置平行柱的之间距离		renderer.setItemMargin(0.5);		//显示每个柱子的数值,并修改改数值的字体属性		renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());		renderer.setBaseItemLabelFont(new Font("隶书", Font.BOLD, 22));		renderer.setBaseItemLabelsVisible(true);		//设置显示值的位置		renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12,				TextAnchor.BASELINE_CENTER));		renderer.setItemLabelAnchorOffset(12D);// 设置柱形图上的文字偏离值		//将修改后的属性值保存到图中,这一步很重要,否则上面对颜色的设置都无效		plot.setRenderer(renderer);		//设置柱子的透明度,0.8相当于80%的透明度		plot.setForegroundAlpha(0.8f);		drawToOut(chart);	}	//饼图	public static void pieCharts() {		//与柱状图和折线图不同		DefaultPieDataset dataset = new DefaultPieDataset();		dataset.setValue("管理人员", 10.02D);		dataset.setValue("市场人员", 20.23D);		dataset.setValue("开发人员", 60.02D);		dataset.setValue("OEM人员", 10.02D);		dataset.setValue("其他人员", 5.11D);		//createPieChart 2D; createPieChart3D  3D		JFreeChart chart = ChartFactory.createPieChart("公司组织架构图", dataset, true, true, false);		//设置标题字体,为了防止中文乱码		chart.setTitle(new TextTitle("公司组织架构统计图", new Font("黑体", Font.ITALIC, 22)));		//取得统计图标的第一个图例		LegendTitle legend = chart.getLegend(0);		//修改图例的字体,必须把显示图片设置为ture,否则会包空指针异常		legend.setItemFont(new Font("宋体", Font.BOLD, 20));		//取得图表显示对象(与柱状图和折线图不同)		PiePlot plot = (PiePlot) chart.getPlot();		//设置区块标签的字体==为了防止中文乱码:必须设置字体		plot.setLabelFont(new Font("隶书", Font.BOLD, 22));		//图形边框颜色		plot.setBaseSectionOutlinePaint(Color.BLUE);		//图形边框粗细		plot.setBaseSectionOutlineStroke(new BasicStroke(0.5f));		//设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制		plot.setDirection(Rotation.ANTICLOCKWISE);//逆时针,Rotation.CLOCKWISE顺时针		//设置绘制角度(图形旋转角度)		plot.setStartAngle(70);		//设置突出显示的数据块		//plot.setExplodePercent(1, 0.5D);		//plot.setExplodePercent("One", 0.5D);		//扇区分离显示,对3D图不起效		plot.setExplodePercent(dataset.getKey(0), 0.1d);		//分类标签与图的连接线颜色		plot.setLabelLinkPaint(Color.BLUE);		//分类标签边框颜色		plot.setLabelOutlinePaint(Color.black);		//分类标签阴影颜色		plot.setLabelShadowPaint(Color.RED);		//指定分类饼的颜色		plot.setSectionPaint(1, Color.BLACK);		//饼状图标签显示百分比 :自定义,{0}表示选项,{1}表示数值,{2}表示所占比例,小数点后两位		plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}\r\n{2}", NumberFormat.getNumberInstance(),				new DecimalFormat("0.00%")));		//图例显示百分比		plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={2}"));		//指定显示的拼图为:圆形(true),还是椭圆形(false)		plot.setCircular(true);		//没有数据的时候显示的内容		plot.setNoDataMessage("没有可用的数据...");		//设置鼠标悬停提示		plot.setToolTipGenerator(new StandardPieToolTipGenerator());		//设置热点链接		//plot.setURLGenerator(new StandardPieURLGenerator("detail.jsp"));		drawToOut(chart);	}	//折线图	public static void lineCharts() {		DefaultCategoryDataset dataSet = new DefaultCategoryDataset();		dataSet.addValue(0.0, "冰箱", "1月");		dataSet.addValue(4.2, "冰箱", "2月");		dataSet.addValue(3.9, "冰箱", "3月");		dataSet.addValue(1.0, "彩电", "1月");		dataSet.addValue(5.2, "彩电", "2月");		dataSet.addValue(7.9, "彩电", "3月");		dataSet.addValue(2.0, "洗衣机", "1月");		dataSet.addValue(9.2, "洗衣机", "2月");		dataSet.addValue(8.9, "洗衣机", "3月");		JFreeChart chart = ChartFactory.createLineChart("折线图", "时间", "销售额(百万)", dataSet, PlotOrientation.VERTICAL,				true, true, false);		// 获取一个图例		LegendTitle legendTitle = chart.getLegend(0);		// 设置图例字体		legendTitle.setItemFont(new Font("宋体", Font.BOLD, 18));		CategoryPlot plot = (CategoryPlot) chart.getPlot();		// 取得横轴		CategoryAxis categoryAxis = plot.getDomainAxis();		// 设置横轴的字体		categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 18));		// 设置分类标签字体		categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 12));		// 取得纵轴		NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();		// 设置纵轴的字体		numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 14));		numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//显示整数		CategoryItemRenderer xylineandshaperenderer = plot.getRenderer();		xylineandshaperenderer.setBaseItemLabelsVisible(true);		xylineandshaperenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE2,				TextAnchor.BASELINE_RIGHT));		xylineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());		drawToOut(chart);	}	public static void drawToOut(JFreeChart chart) {		FileOutputStream fos;		try {			fos = new FileOutputStream("d://1.jpg");			ChartUtilities.writeChartAsJPEG(fos, chart, 1400, 800);		} catch (Exception e) {			e.printStackTrace();		}		System.out.println("成功");	}	public static void main(String[] args) {		//		Jfreechart.barCharts();//柱状图		//		Jfreechart.pieCharts();//饼状图		Jfreechart.lineCharts();	}}