📄 crosshairdemo2.java
字号:
package com.hollysys.gtjhgyj.chart;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.JspWriter;
import javax.swing.ImageIcon;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.time.Month;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.Layer;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.TextAnchor;
public class CrosshairDemo2
{
static Class class$org$jfree$data$time$Year; /* synthetic field */
static Class class$org$jfree$data$time$Month; /* synthetic field */
public XYDataset createDataset()
{
TimeSeries xyseries = new TimeSeries("财政收入",Month.class);
xyseries.add(new Month(1,2007), 1.0D);
xyseries.add(new Month(2,2007), 4D);
xyseries.add(new Month(3,2007), 3D);
xyseries.add(new Month(4,2007), 5D);
xyseries.add(new Month(5,2007), 5D);
xyseries.add(new Month(6,2007), 7D);
xyseries.add(new Month(7,2007), 7D);
xyseries.add(new Month(8,2007), 8D);
TimeSeries xyseries1 = new TimeSeries("平均增长率",Month.class);
xyseries1.add(new Month(1,2007), 3.0D);
xyseries1.add(new Month(2,2007), 4.9D);
xyseries1.add(new Month(3,2007), 3.5D);
xyseries1.add(new Month(4,2007), 4.5D);
xyseries1.add(new Month(5,2007), 5.5D);
xyseries1.add(new Month(6,2007), 7D);
xyseries1.add(new Month(7,2007), 7.9D);
xyseries1.add(new Month(8,2007), 1.8D);
TimeSeries xyseries2 = new TimeSeries("增加率",Month.class);
xyseries2.add(new Month(1,2007), 4.0D);
xyseries2.add(new Month(2,2007), 6.4D);
xyseries2.add(new Month(3,2007), 3.8D);
xyseries2.add(new Month(4,2007), 5.9D);
xyseries2.add(new Month(5,2007), 8.2D);
xyseries2.add(new Month(6,2007), 4.2D);
xyseries2.add(new Month(7,2007), 9.7D);
xyseries2.add(new Month(8,2007), 5.6D);
TimeSeriesCollection xyseriescollection = new TimeSeriesCollection(); //再用XYSeriesCollection添加入XYSeries 对象
xyseriescollection.addSeries(xyseries);
xyseriescollection.addSeries(xyseries1);
xyseriescollection.addSeries(xyseries2);
return xyseriescollection;
}
public JFreeChart createChart(XYDataset xydataset)
{
// JFreeChart jfreechart = ChartFactory.createXYSeriesChart("时序图", "时间", "对应值", xydataset, true, true, false);
//JFreeChart jfreechart = ChartFactory.createXYLineChart("Example","纵坐标","横坐标",xydataset,PlotOrientation.VERTICAL,true,true,false);
JFreeChart jfreechart = ChartFactory.createTimeSeriesChart("Example","纵坐标","横坐标",xydataset,true,true,false);
jfreechart.setBackgroundPaint(Color.white);
ImageIcon ii = new ImageIcon("c:\\Image00000.jpg");//背景图片
Image img = ii.getImage();
XYPlot xyplot = jfreechart.getXYPlot();
xyplot.setBackgroundPaint(Color.white);//设置背景着色
//xyplot.getRangeAxis().setVisible(false);//使纵轴不可见
//xyplot.setDomainGridlinePaint(Color.white); //网格线纵向颜色,如果注销,将不生成网格线
xyplot.setRangeGridlinePaint(Color.black); //网格线横向颜色,如果注销,将不生成网格线
xyplot.setDomainGridlinesVisible(false);//网格线纵向不可见
xyplot.setRangeGridlinesVisible(true);//网格线横向不可见
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
xyplot.setDomainCrosshairVisible(true);
xyplot.setDomainCrosshairLockedOnData(false);
xyplot.setRangeCrosshairVisible(false);
//xyplot.setBackgroundImage(img);
xyplot.setBackgroundImageAlpha(1.0f);
XYItemRenderer xyitemrenderer = xyplot.getRenderer();
//xyitemrenderer.setPaint(Color.black);//设置所有曲线的着色
xyitemrenderer.setSeriesPaint(0, Color.black);//设置第一条曲线的着色
xyitemrenderer.setSeriesPaint(1, Color.red);//设置第二条曲线的着色
//将第二条线设置为虚线
xyitemrenderer.setSeriesStroke(1, new BasicStroke(1.0F, 1, 1, 1.0F, new float[] {
5F, 3F
}, 0.0F));
/**
* 单独设置曲线着色
xyitemrenderer.setSeriesPaint(0, Color.black);
xyitemrenderer.setSeriesPaint(1, Color.red);
xyitemrenderer.setSeriesPaint(2, Color.black);
xyitemrenderer.setSeriesPaint(3, Color.black);
*/
IntervalMarker intervalmarker0 = new IntervalMarker(0D, 2D);
intervalmarker0.setLabel("青灯区");
intervalmarker0.setLabelFont(new Font("SansSerif", 2, 11));
intervalmarker0.setLabelAnchor(RectangleAnchor.LEFT);
intervalmarker0.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
intervalmarker0.setPaint(Color.cyan);
xyplot.addRangeMarker(intervalmarker0, Layer.BACKGROUND);
IntervalMarker intervalmarker = new IntervalMarker(2D, 4D);
intervalmarker.setLabel("黄灯区");
intervalmarker.setLabelFont(new Font("SansSerif", 2, 11));
intervalmarker.setLabelAnchor(RectangleAnchor.LEFT);
intervalmarker.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
intervalmarker.setPaint(Color.yellow);
xyplot.addRangeMarker(intervalmarker, Layer.BACKGROUND);
IntervalMarker intervalmarker1 = new IntervalMarker(4D,6D);
intervalmarker1.setLabel("蓝灯区");
intervalmarker1.setLabelFont(new Font("SansSerif", 2, 11));
intervalmarker1.setLabelAnchor(RectangleAnchor.LEFT);
intervalmarker1.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
intervalmarker1.setPaint(Color.BLUE);
xyplot.addRangeMarker(intervalmarker1, Layer.BACKGROUND);
IntervalMarker intervalmarker2 = new IntervalMarker(6D, 8D);
intervalmarker2.setLabel("绿灯区");
intervalmarker2.setLabelFont(new Font("SansSerif", 2, 11));
intervalmarker2.setLabelAnchor(RectangleAnchor.LEFT);
intervalmarker2.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
intervalmarker2.setPaint(Color.green);
xyplot.addRangeMarker(intervalmarker2, Layer.BACKGROUND);
IntervalMarker intervalmarker3 = new IntervalMarker(8D, 10D);
intervalmarker3.setLabel("红灯区");
intervalmarker3.setLabelFont(new Font("SansSerif", 2, 11));
intervalmarker3.setLabelAnchor(RectangleAnchor.LEFT);
intervalmarker3.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
intervalmarker3.setPaint(Color.RED);
xyplot.addRangeMarker(intervalmarker3, Layer.BACKGROUND);
/**
* 设置刻度长度,纵坐标
NumberAxis numberAxis = (NumberAxis) xyplot.getRangeAxis();
numberAxis .setAutoTickUnitSelection(false);double unit=10d;//刻度的长度
NumberTickUnit ntu= new NumberTickUnit(unit);
numberAxis .setTickUnit(ntu);
*/
/**
* 设置是否显示曲线结点
if(xyitemrenderer instanceof XYLineAndShapeRenderer)
{
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyitemrenderer;
xylineandshaperenderer.setShapesVisible(true);
xylineandshaperenderer.setShapesFilled(true);
xylineandshaperenderer.setItemLabelsVisible(true);
}
*/
// PeriodAxis periodaxis = new PeriodAxis("月份");
// periodaxis.setAutoRangeTimePeriodClass(class$org$jfree$data$time$Year != null ? class$org$jfree$data$time$Year : (class$org$jfree$data$time$Year = class$("org.jfree.data.time.Year")));
// periodaxis.setMajorTickTimePeriodClass(class$org$jfree$data$time$Year != null ? class$org$jfree$data$time$Year : (class$org$jfree$data$time$Year = class$("org.jfree.data.time.Year")));
// periodaxis.setTickMarkOutsideLength(0.0F);
// PeriodAxisLabelInfo aperiodaxislabelinfo[] = new PeriodAxisLabelInfo[2];
//
// aperiodaxislabelinfo[0] = new PeriodAxisLabelInfo(class$org$jfree$data$time$Month != null ? class$org$jfree$data$time$Month : (class$org$jfree$data$time$Month = class$("org.jfree.data.time.Month")), new SimpleDateFormat("MMM"));
// aperiodaxislabelinfo[1] = new PeriodAxisLabelInfo(class$org$jfree$data$time$Year != null ? class$org$jfree$data$time$Year : (class$org$jfree$data$time$Year = class$("org.jfree.data.time.Year")), new SimpleDateFormat("yyyy"));
// periodaxis.setLabelInfo(aperiodaxislabelinfo);
// //刻度长度,不能设为自动
// //periodaxis.setAutoRange(false);
// periodaxis.setAutoTickUnitSelection(false);
// periodaxis.setAutoRangeMinimumSize(0.1d);
//
// DateAxis xAxis = new DateAxis("月份");
// Date start_time = new Date(2001,1,1);
// Date end_time = new Date(2003,12,1);
// xAxis.setRange(start_time, end_time);
// xAxis.setAutoTickUnitSelection(false);
// xAxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH,1));
// xyplot.setDomainAxis(periodaxis);
//设置横坐标间隔
DateAxis domainaxis = (DateAxis)xyplot.getDomainAxis();
domainaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH,2)); //显示:0,1,2,3,...
//设置纵坐标间隔
NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();
numberaxis.setTickUnit(new NumberTickUnit(2D)); //显示:0,1,2,3,...
return jfreechart;
}
public String drawPic(HttpSession session, JspWriter out) {
String fileName = null;
JFreeChart chart = this.createChart(createDataset());
try {
PrintWriter pw = new PrintWriter(out);
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
fileName = ServletUtilities.saveChartAsPNG(chart, 640, 400, info,session);//生成图片,并设置图片大小
ChartUtilities.writeImageMap(pw, fileName, info, true);//生成图片热点
} catch (IOException e) {
System.out.println("生成图片时出错");
}
return fileName;
}
static Class class$(String s)
{
try {
return Class.forName(s);
} catch (ClassNotFoundException e) {
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -