首页>代码>Java开源绘制图形组件jfreechart>/JfreechartTest/src/smart/jrsoft/chart/DrawLine.java
package smart.jrsoft.chart;

import java.awt.Color;
import java.io.FileOutputStream;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RectangleInsets;
import javax.servlet.http.*;
/**
 * @author Sychallenger
 */
public class DrawLine {

	private static DrawLine instance = null; 	// 画折线图的实例
	private String title = "折线图实例"; 		// 折线图标题
	private String XTitle = "横柱标题"; 		// 折线图横坐标题目
	private String YTitle = "纵柱标题"; 		// 折线图纵坐标题目
	private int width = 800; 			// 图片宽度
	private int height = 450; 			// 图片高度
	private String fileName = "d:\\temp.jpg"; 	// 暂时保存的图片名称
	private boolean isV = true; 			// 是否垂直线显示
	private Color bgColor = Color.WHITE; 		// 图像背景颜色
	private Color foreColor = Color.lightGray; 	// 会折线图区域背景颜色
	private Color spaceLineColor = Color.white; // 间隔线颜色

	private XYPointList xyList=null;
	private FileOutputStream fosJpg = null; 			// 生成折线图的输出流
	private	XYSeriesCollection xyseriescollection = new XYSeriesCollection(); // 点序列集合


	/**
	 * 获取该类单一对象
	 * @return 该类事例
	 */
	public static synchronized DrawLine getInstance() {
		if (instance == null)
			instance = new DrawLine();
		return instance;
	}
	/**
	 * 设置坐标集合名称 用于存放画折线图的点
	 * @param str 坐标集合名称
	 * @return 成功 true
	 */
	public boolean setXYPointList(String str){
		if(this.xyList!=null){
			this.xyList=null;
		}
		this.xyList=new XYPointList(str);
		return true;
	}
	/**
	 * 添加点集
	 * @return 成功 true
	 */
	public boolean addPointList(){
		if(this.xyList==null){
			return false;
		}
		this.xyseriescollection.addSeries(this.xyList.getXYSeries());
		return true;
	}


	/**
	 * 给坐标集合添加点坐标
	 * @param xValue x坐标值
	 * @param yValue y坐标值
	 * @return 成功 true 失败 false
	 */
	public boolean addPoint(double xValue,double yValue){
		if(this.xyList==null){
			return false;
		}
		this.xyList.add(xValue,yValue);
		return true;
	}
	/**
	 * 设置初始化参数
	 */
	public void init(){
		setTitle("折线图实例");
		setXTitle("横柱标题");
		setYTitle("纵柱标题");
		setWidth(800);
		setHeight(450);
		setFileName("d:\\temp.jpg");
		setIsV(true);
		setBgColor(Color.white);
		setForeColor(Color.lightGray);
		setSpaceLineColor(Color.white);
	}

	/**
	 * 恢复默认值
	 */
	public void reset(){
		init();
	}
	/**
	 * 设置图像标题名称
	 * @param title  图像标题名称
	 */
	public void setTitle(String title) {
		this.title = title;
	}

	/**
	 * 设置图像的水平坐标名称
	 * @param title 水平坐标名称
	 */
	public void setXTitle(String title) {
		this.XTitle = title;
	}

	/**
	 * 设置图像的垂直坐标的名称
	 * @param title  图像的垂直坐标的名称
	 */
	public void setYTitle(String title) {
		this.YTitle = title;
	}

	/**
	 * 设置图像的宽度
	 * @param width 图像的宽度
	 */
	public void setWidth(int width) {
		this.width = width;
	}
	/**
	 * 设置图像的宽度
	 * @param width 图像的宽度
	 */
	public void setHeight(int height) {
		this.height = height;
	}
	/**
	 * 设置图像高度
	 * @param height
	 */
	public void setXTitle(int height) {
		this.height = height;
	}

	/**
	 * 设置保存文件名称
	 * @param fileName 保存文件名称
	 */
	private void setFileName(String fileName) {
		this.fileName = fileName;
	}

	/**
	 * 设置绘水平图还是垂直图
	 * @param isV 水平图还是垂直图
	 */
	public void setIsV(boolean isV) {
		this.isV = isV;
	}


	/**
	 * 设置背景颜色
	 * @param color 背景颜色
	 */
	public void setBgColor(Color color){
		this.bgColor=color;
	}


	/**
	 * 设置背景颜色
	 * @param red   red色素值
	 * @param green green色素值
	 * @param blue  blue色素值
	 */
	public void setBgColor(int red,int green,int blue){
		this.bgColor=new Color(red,green,blue);
	}


	/**
	 * 改变背景颜色
	 * @param str  背景颜色描述 比如:BLACK black blue Blue 等
	 */
	public void setBgcolor(String str){
		this.bgColor=ChangeColor.getColor(str);
	}


	/**
	 * 设置绘折线图区域的背景颜色
	 * @param color 绘折线图区域的背景颜色
	 */
	public void setForeColor(Color color){
		this.foreColor=color;
	}


	/**
	 * 设置绘折线图区域的背景颜色
	 * @param red   red色素值
	 * @param green green色素值
	 * @param blue  blue色素值
	 */
	public void setForeColor(int red,int green,int blue){
		this.foreColor=new Color(red,green,blue);
	}

	/**
	 * 设置绘折线图区域的背景颜色
	 * @param str  背景颜色描述 比如:BLACK black blue Blue 等
	 */
	public void setForeColor(String str){
		this.foreColor=ChangeColor.getColor(str);
	}


	/**
	 * 设置间隔线的颜色
	 * @param red   red色素值
	 * @param green green色素值
	 * @param blue  blue色素值
	 */
	public void setSpaceLineColor(int red,int green,int blue){
		this.spaceLineColor=new Color(red,green,blue);
	}


	/**
	 * 设置间隔线的颜色
	 * @param color 间隔线的颜色
	 */
	public void setSpaceLineColor(Color color){
		this.spaceLineColor=color;
	}


	/**
	 * 设置绘折线图区域的背景颜色
	 * @param str  背景颜色描述 比如:BLACK black blue Blue 等
	 */
	public void setSpaceLineColor(String str){
		this.spaceLineColor=ChangeColor.getColor(str);
	}

	/**
	 * 添加点集
	 * @param xyPointList 点集
	 */
//	public void addXYPointList(XYPointList xyPointList) {
//		this.xyseriescollection.addSeries(xyPointList.getXYSeries());
//	}

	/**
	 * 按文件路径保存生成的折线图
	 * @param fileName  保存文件名称 文件名称为(使用路径为): d:\\web\test.jpg
	 * @return 成功:true 失败:false
	 */
        public boolean saveAbs(String fileName) {
          JFreeChart jfreechart = null;
          if (fileName != null) {
            this.setFileName(fileName);
          }
          if (isV == true) {
            jfreechart = ChartFactory.createXYLineChart(this.title,
                                                        this.XTitle, this.YTitle,
                                                        xyseriescollection,
                                                        PlotOrientation.VERTICAL, true, true, false);
          }
          else {
            jfreechart = ChartFactory.createXYLineChart(this.title,
                                                        this.XTitle, this.YTitle,
                                                        xyseriescollection,
                                                        PlotOrientation.HORIZONTAL, true, true, false);
          }
          jfreechart.setBackgroundPaint(this.bgColor);
          XYPlot xyplot = (XYPlot) jfreechart.getPlot();
          xyplot.setBackgroundPaint(this.foreColor);
          xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
          xyplot.setDomainGridlinePaint(this.spaceLineColor);
          xyplot.setRangeGridlinePaint(this.spaceLineColor);
          XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)
              xyplot
              .getRenderer();
          xylineandshaperenderer.setShapesVisible(true);
          xylineandshaperenderer.setShapesFilled(true);
          NumberAxis numberaxis = (NumberAxis) xyplot.getRangeAxis();
          numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
          FileOutputStream fosJpg = null;
          try {
            fosJpg = new FileOutputStream(fileName);
            ChartUtilities.writeChartAsJPEG(fosJpg, 100, jfreechart, this.width, this.height,
                                            null);

          }
          catch (Exception e) {

          }
          finally {
            this.xyseriescollection.removeAllSeries();
            try {
              fosJpg.close();
            }
            catch (Exception e) {
            }
          }
          return true;
        }



        /**
        * 按网站路径保存生成的折线图
        * @param request   在jsp页面中的request对象 用于获取文件路径
        * @param fileName   保存文件名称 文件名称必须使用站点的绝对路径 如 : “/admin/test.jpg"
        * @return true 成功  false 失败
        */
        public boolean saveWebFile(HttpServletRequest request, String fileName) {
          JFreeChart jfreechart = null;
          if (fileName != null) {
            this.setFileName(fileName);
          }
          fileName = request.getRealPath("") + fileName;
          if (isV == true) {
            jfreechart = ChartFactory.createXYLineChart(this.title,
                                                        this.XTitle, this.YTitle,
                                                        xyseriescollection,
                                                        PlotOrientation.VERTICAL, true, true, false);
          }
          else {
            jfreechart = ChartFactory.createXYLineChart(this.title,
                                                        this.XTitle, this.YTitle,
                                                        xyseriescollection,
                                                        PlotOrientation.HORIZONTAL, true, true, false);
          }
          jfreechart.setBackgroundPaint(this.bgColor);
          XYPlot xyplot = (XYPlot) jfreechart.getPlot();
          xyplot.setBackgroundPaint(this.foreColor);
          xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
          xyplot.setDomainGridlinePaint(this.spaceLineColor);
          xyplot.setRangeGridlinePaint(this.spaceLineColor);
          XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)
              xyplot
              .getRenderer();
          xylineandshaperenderer.setShapesVisible(true);
          xylineandshaperenderer.setShapesFilled(true);
          NumberAxis numberaxis = (NumberAxis) xyplot.getRangeAxis();
          numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
          FileOutputStream fosJpg = null;
          try {
            fosJpg = new FileOutputStream(fileName);
            ChartUtilities.writeChartAsJPEG(fosJpg, 100, jfreechart, this.width, this.height,
                                            null);

          }
          catch (Exception e) {

          }
          finally {
            this.xyseriescollection.removeAllSeries();
            try {
              fosJpg.close();
            }
            catch (Exception e) {
            }
          }
          return true;

        }

	public static void main(String[] args) {
		//1.生成画折线图的类对象
		DrawLine drawLine = DrawLine.getInstance();
		//2.添加点集
		drawLine.setXYPointList("点集一");
		drawLine.addPoint(1.0D, 1.0D);
		drawLine.addPoint(2D, 4D);
		drawLine.addPoint(3D, 3D);
		drawLine.addPoint(4D, 5D);
		drawLine.addPoint(6D, 7D);
		drawLine.addPoint(7D, 7D);
		drawLine.addPoint(8D, 8D);
		drawLine.addPointList();
		drawLine.setXYPointList("点集二");
		drawLine.addPoint(5.0D, 1.0D);
		drawLine.addPoint(2D, 3D);
		drawLine.addPoint(5D, 3D);
		drawLine.addPoint(2D, 5D);
		drawLine.addPoint(3D, 2D);
		drawLine.addPoint(7D, 1D);
		drawLine.addPoint(3D, 8D);
		drawLine.addPointList();
		//3.设置图片属性
		drawLine.init();
		drawLine.setTitle("测试折线图");
		drawLine.setXTitle("测试折线图横坐标");
		drawLine.setYTitle("测试折线图纵坐标");
		drawLine.setBgColor(Color.white);
		drawLine.setForeColor(Color.lightGray);
		drawLine.setSpaceLineColor(Color.white);
		drawLine.setWidth(800);
		drawLine.setHeight(450);
		//4.保存图片
		drawLine.saveAbs("e:\\DrawLine.jpg");
	}
}
最近下载更多
lironggang  LV38 2023年3月20日
杠上炮  LV6 2022年6月28日
xcj456  LV8 2020年9月12日
chaoy_nx  LV8 2020年2月24日
s222222  LV4 2019年5月7日
zjjhzjb  LV14 2019年2月12日
弹簧木偶  LV10 2018年9月27日
蓝色鸢尾  LV2 2018年8月23日
kuizhaoyi  LV1 2018年6月13日
mxl165856  LV12 2017年12月11日
最近浏览更多
fesfefe  LV13 2023年11月1日
dsadasdwf  LV12 2023年7月7日
lironggang  LV38 2023年3月20日
东北人  LV12 2022年9月20日
杠上炮  LV6 2022年6月28日
微信网友_5957378031800320  LV3 2022年5月18日
小爷葛优躺  LV2 2021年6月22日
Ciaoss  LV1 2021年6月7日
andy xiao2222222  LV9 2021年6月2日
fangzhicheng  LV1 2021年4月21日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友