JFreeChart报表实现仪表盘

import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Point;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.dial.DialBackground;
import org.jfree.chart.plot.dial.DialCap;
import org.jfree.chart.plot.dial.DialPlot;
import org.jfree.chart.plot.dial.DialTextAnnotation;
import org.jfree.chart.plot.dial.DialValueIndicator;
import org.jfree.chart.plot.dial.StandardDialFrame;
import org.jfree.chart.plot.dial.StandardDialScale;
import org.jfree.chart.plot.dial.DialPointer.Pin;
import org.jfree.chart.plot.dial.DialPointer.Pointer;
import org.jfree.data.general.DefaultValueDataset;
import org.jfree.ui.GradientPaintTransformType;
import org.jfree.ui.RefineryUtilities;
import org.jfree.ui.StandardGradientPaintTransformer;

/**
 * 仪表盘制作
 * 
 * @author Administrator
 * 
 */
public class DialDemo3 {
	public static void main(String[] args) {
		// 1,数据集合对象 此处为DefaultValueDataset
		DefaultValueDataset dataset = new DefaultValueDataset();
		// 当前指针指向的位置,即:我们需要显示的数据
		dataset.setValue(10D);
		DefaultValueDataset dataset2 = new DefaultValueDataset();
		dataset2.setValue(20D);
		/**
		 * 获取图表区域对象
		 * 
		 * A. setDataSet(int index, DataSet dataSet);
		 * 为表盘设定使用的数据集,通常一个表盘上可能存在多个指针, 因此需要制定该数据集与哪个指针相互关联。 可以将指针想象成数据集的一种体现方式。
		 */
		DialPlot dialplot = new DialPlot();
		dialplot.setView(0.0D, 0.0D, 1.0D, 1.0D);
		dialplot.setDataset(0, dataset);
		dialplot.setDataset(1, dataset2);
		// System.out.println("dataset count:"+dialplot.getDatasetCount());
		/**
		 * 开始设置显示框架结构 B. setDailFrame(DailFrame dailFrame);
		 * 设置表盘的底层面板图像,通常表盘是整个仪表的最底层。
		 */
		StandardDialFrame dialFrame = new StandardDialFrame();
        dialFrame.setBackgroundPaint(Color.lightGray);
        dialFrame.setForegroundPaint(Color.darkGray);
		dialplot.setDialFrame(dialFrame);
		/**
		 * 结束设置显示框架结构 C. setBackground(Color color);
		 * 设置表盘的颜色,可以采用Java内置的颜色控制方式来调用该方法。
		 */
		GradientPaint gradientpaint = new GradientPaint(new Point(), new Color(
				255, 255, 255), new Point(), new Color(170, 170, 220));
		DialBackground dialbackground = new DialBackground(gradientpaint);
		dialbackground
				.setGradientPaintTransformer(new StandardGradientPaintTransformer(
						GradientPaintTransformType.VERTICAL));
		dialplot.setBackground(dialbackground);
		
		// 设置显示在表盘中央位置的信息
		DialTextAnnotation dialtextannotation = new DialTextAnnotation("km/h");
		dialtextannotation.setFont(new Font("Dialog", 1, 14));
		dialtextannotation.setRadius(0.69999999999999996D);
		dialplot.addLayer(dialtextannotation);
		
		/**
		 * 指针指向的数据,用文本显示出来,并指向一个数据集
		 * DialValueIndicator dialvalueindicator = new DialValueIndicator(0);
		 * dialplot.addLayer(dialvalueindicator);
		 */
        DialValueIndicator dvi = new DialValueIndicator(0);
        dvi.setFont(new Font("Dialog", Font.PLAIN, 10));
        dvi.setOutlinePaint(Color.darkGray);
        dvi.setRadius(0.60);
        dvi.setAngle(-103.0);
        dialplot.addLayer(dvi);
        
        DialValueIndicator dvi2 = new DialValueIndicator(1);
        dvi2.setFont(new Font("Dialog", Font.PLAIN, 10));
        dvi2.setOutlinePaint(Color.red);
        dvi2.setRadius(0.60);
        dvi2.setAngle(-77.0);
        dialplot.addLayer(dvi2);
		// 根据表盘的直径大小(0.75),设置总刻度范围
		/**
		 * F. addScale(int index, DailScale dailScale);
		 * 用于设定表盘上的量程,index指明该量程属于哪一个指针所指向的数据集, DailScale指明该量程的样式,如量程的基本单位等信息。
		 * 
		 * StandardDialScale(double lowerBound, double upperBound, double
		 * startAngle, double extent, double majorTickIncrement, int
		 * minorTickCount) new StandardDialScale(-40D, 60D, -120D, -300D,30D);
		 */
		// 对应pointer
		StandardDialScale dialScale1 = new StandardDialScale();
		dialScale1.setLowerBound(-40D); // 最底表盘刻度
		dialScale1.setUpperBound(60D); // 最高表盘刻度
		dialScale1.setStartAngle(-120D); // 弧度为120,刚好与人的正常视觉对齐
		dialScale1.setExtent(-300D); // 弧度为300,刚好与人的正常视觉对齐
		dialScale1.setTickRadius(0.88D); // 值越大,与刻度盘框架边缘越近
		dialScale1.setTickLabelOffset(0.14999999999999999D); // 值越大,与刻度盘刻度越远0
																// .14999999999999999D
		dialScale1.setTickLabelFont(new Font("Dialog", 0, 14)); // 刻度盘刻度字体
		dialplot.addScale(0, dialScale1);
		// 对应pin
		StandardDialScale dialScale2 = new StandardDialScale();
		dialScale2.setLowerBound(0D);
		dialScale2.setUpperBound(100D);
		dialScale2.setStartAngle(-120D);
		dialScale2.setExtent(-300D);
		dialScale2.setTickRadius(0.52D);
		dialScale2.setTickLabelOffset(0.1D);
		dialScale2.setTickLabelFont(new Font("Dialog", 0, 10));  //设置刻度盘字体类型
		//dialScale2.setTickLabelPaint(new Color(255,0,0));  //设置刻度盘字体颜色
		dialScale2.setMinorTickPaint(new Color(255,0,0));  //设置刻度盘小刻度颜色为red
		dialScale2.setMajorTickPaint(new Color(255,0,0));  //设置刻度盘大刻度颜色为red
		dialplot.addScale(1, dialScale2);
		/**
		 * 设置指针 G. addPointer(DailPointer dailPointer);
		 * 用于设定表盘使用的指针样式,JFreeChart中有很多可供选择指针样式,
		 * 用户可以根据使用需要,采用不同的DailPoint的实现类来调用该方法
		 */
		// 指针一
		Pointer pointer = new Pointer(0); // 内部内
		dialplot.addPointer(pointer); // addLayer(pointer);
		dialplot.mapDatasetToScale(0, 0);   //Scale与Dataset对应
		// 指针二
		Pin pin = new Pin(1);
		pin.setPaint(new GradientPaint(new Point(), new Color(255, 0, 0),
				new Point(), new Color(170, 170, 220)));   //设置指针样式
		pin.setRadius(0.50);   //设置指针半径,也就是指针长短
		dialplot.addPointer(pin);	
		dialplot.mapDatasetToScale(1, 1);   //Scale与Dataset对应
		/**
		 * 实例化DialCap H. setCap(DailCap dailCap); 1,设定指针上面的盖帽的样式。 2,也就是设置指针的起点的圆
		 */
		DialCap dialcap = new DialCap();
		dialcap.setRadius(0.0700000000000001D);// 0.10000000000000001D
		dialplot.setCap(dialcap);
		// 生成chart对象
		JFreeChart jfreechart = new JFreeChart(dialplot);
		// 设置标题
		jfreechart.setTitle("仪表盘");
		ChartFrame frame = new ChartFrame("仪表盘", jfreechart,
				true);
		frame.pack();
		// 屏幕居中
		RefineryUtilities.centerFrameOnScreen(frame);
		frame.setVisible(true);
	}
}

你可能感兴趣的:(数据结构,UI,框架,jfreechart,F#)