最代码广告位
首页>分享>Java开源绘制图形组件jfreechart>/JfreechartTest/src/smart/jrsoft/chart/DrawDotLine.java
package smart.jrsoft.chart;

import java.awt.BasicStroke;
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.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.DefaultCategoryDataset;
import javax.servlet.http.*;

/**
 * @author oracle
 */
public class DrawDotLine {
	private static DrawDotLine 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;	//间隔线颜色

	FileOutputStream fosJpg = null;				//生成点线图的输出流
	DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();


	/**
	 * 获取该类单一对象
	 * @return 该类事例
	 */
	public static synchronized DrawDotLine getInstance() {
		if (instance==null)
		instance=new DrawDotLine();
		return instance;
	}


	/**
	 * 设置图像标题名称
	 * @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 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);
	}


	/**
	 *初始化相关参数
	 */
	public void init(){
		setTitle("点线图实例");
		setXTitle("横坐标标题");
		setYTitle("纵坐标标题");
		setWidth(800);
		setHeight(450);
		setIsV(true);
		setBgColor(255,255,255);
		setFileName("d:\\temp.jpg");
		setForeColor(Color.lightGray);
		setSpaceLineColor(Color.white);
	}


	/**
	 *恢复到初始化状态
	 */
	public void reset(){
		init();
	}


	/**
	 * 添加要绘制点线图的数据
	 * @param typeName  数据类型名称
	 * @param value     数据值
	 * @param groupName 数据组
	 */
	public void addValue(String typeName,double value,String groupName){
		defaultcategorydataset.addValue(value,groupName,typeName);
	}


	/**
	 * 生成点线图像
	 * @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.createLineChart(this.title, this.XTitle,
                                                      this.YTitle,
                                                      defaultcategorydataset,
                                                      PlotOrientation.VERTICAL, true, true, false);
          }
          else {
            jfreechart = ChartFactory.createLineChart(this.title, this.XTitle,
                                                      this.YTitle,
                                                      defaultcategorydataset,
                                                      PlotOrientation.HORIZONTAL, true, true, false);
          }

          jfreechart.setBackgroundPaint(this.bgColor);
          CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
          categoryplot.setBackgroundPaint(this.foreColor);
          categoryplot.setRangeGridlinePaint(this.spaceLineColor);
          NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
          numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
          numberaxis.setAutoRangeIncludesZero(true);
          LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)
              categoryplot.getRenderer();
          lineandshaperenderer.setShapesVisible(true);
          lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
              10F, 6F
          }
              , 0.0F));
          lineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
              6F, 6F
          }
              , 0.0F));
          lineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
              2.0F, 6F
          }
              , 0.0F));
          FileOutputStream fosJpg = null;
          try {
            fosJpg = new FileOutputStream(fileName);
            ChartUtilities.writeChartAsJPEG(fosJpg, 100, jfreechart, this.width, this.height, null);

          }
          catch (Exception e) {
            return false;
          }
          finally {
            this.defaultcategorydataset.clear();
            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.createLineChart(this.title, this.XTitle,
                                                      this.YTitle,
                                                      defaultcategorydataset,
                                                      PlotOrientation.VERTICAL, true, true, false);
          }
          else {
            jfreechart = ChartFactory.createLineChart(this.title, this.XTitle,
                                                      this.YTitle,
                                                      defaultcategorydataset,
                                                      PlotOrientation.HORIZONTAL, true, true, false);
          }

          jfreechart.setBackgroundPaint(this.bgColor);
          CategoryPlot categoryplot = (CategoryPlot) jfreechart.getPlot();
          categoryplot.setBackgroundPaint(this.foreColor);
          categoryplot.setRangeGridlinePaint(this.spaceLineColor);
          NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
          numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
          numberaxis.setAutoRangeIncludesZero(true);
          LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)
              categoryplot.getRenderer();
          lineandshaperenderer.setShapesVisible(true);
          lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
              10F, 6F
          }
              , 0.0F));
          lineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
              6F, 6F
          }
              , 0.0F));
          lineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
              2.0F, 6F
          }
              , 0.0F));
          FileOutputStream fosJpg = null;
          try {
            fosJpg = new FileOutputStream(fileName);
            ChartUtilities.writeChartAsJPEG(fosJpg, 100, jfreechart, this.width, this.height, null);

          }
          catch (Exception e) {
            return false;
          }
          finally {
             this.defaultcategorydataset.clear();
            try {
              fosJpg.close();
            }
            catch (Exception e) {}
          }
          return true;

        }
	public static void main(String[] args) {

		//1.生成绘点线图的对象
		DrawDotLine drawDotLine =new  DrawDotLine();
		//2.添加绘图的数据
		drawDotLine.addValue("s1",2.0,"group1");
		drawDotLine.addValue("s2",3.0,"group1");
		drawDotLine.addValue("s3",3.0,"group1");
		drawDotLine.addValue("s4",2.0,"group1");
		drawDotLine.addValue("s5",1.0,"group1");
		drawDotLine.addValue("s6",4.0,"group1");
		drawDotLine.addValue("s7",3.0,"group1");
		drawDotLine.addValue("s8",2.0,"group1");
		drawDotLine.addValue("s9",5.0,"group1");
		drawDotLine.addValue("s10",1.0,"group1");

		drawDotLine.addValue("s1",3.0,"group2");
		drawDotLine.addValue("s2",1.0,"group2");
		drawDotLine.addValue("s3",5.0,"group2");
		drawDotLine.addValue("s4",1.0,"group2");
		drawDotLine.addValue("s5",3.0,"group2");
		drawDotLine.addValue("s6",2.0,"group2");
		drawDotLine.addValue("s7",5.0,"group2");
		drawDotLine.addValue("s8",2.0,"group2");
		drawDotLine.addValue("s9",1.0,"group2");
		drawDotLine.addValue("s10",4.0,"group2");
		//3.设置图片属性
		drawDotLine.init();
		drawDotLine.setTitle("点线图演示");
		drawDotLine.setXTitle("点线图横坐标标题");
		drawDotLine.setYTitle("点线图纵坐标标题");

		drawDotLine.setBgColor(Color.white);
		drawDotLine.setForeColor(Color.lightGray);
		drawDotLine.setSpaceLineColor(Color.white);
		drawDotLine.setWidth(800);
		drawDotLine.setHeight(450);
		//4.保存图片
		drawDotLine.saveAbs("e:\\DrawDotLine.jpg");

	}
}
最近下载更多
chaoy_nx LV72月24日
月亮星星星星星星
s222222 LV42019年5月7日
月亮
zjjhzjb LV122019年2月12日
月亮月亮月亮
弹簧木偶 LV102018年9月27日
月亮月亮星星星星
蓝色鸢尾 LV22018年8月23日
星星星星
kuizhaoyi LV12018年6月13日
星星
mxl165856 LV112017年12月11日
月亮月亮星星星星星星
13027220631 LV22017年8月12日
星星星星
assdds LV12017年7月21日
星星
Lumia用户 LV22017年5月22日
星星星星
最近浏览更多
chaoy_nx LV72月24日
月亮星星星星星星
DreamsKS LV52月20日
月亮星星
emmm1997 LV12月10日
星星
hhhyyyrrr LV12019年11月8日
星星
酒瓯2246565652019年10月14日
暂无贡献等级
paul_gaopeng LV42019年9月6日
月亮
wanglong_wang LV122019年8月1日
月亮月亮月亮
sssssssyy LV102019年7月25日
月亮月亮星星星星
zhaoxiaolei LV52019年7月17日
月亮星星
hefei100 LV22019年7月16日
星星星星
顶部客服微信二维码底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友