Java Swing JFreeChart-TimeSeriesChart实现动态时序图

import java.awt.Font;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.time.Second;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;

public class TimeSeriesChart {
	ChartPanel frame1;
	XYPlot xyplot;

	public TimeSeriesChart(Object[] columnTitle, Object[][] tableData, String fileName, int[] picks) {
		XYDataset xydataset = createDataset(columnTitle, tableData, picks);

		JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(fileName, "时间/min", "数值", xydataset, true, true,
				true);

		xyplot = (XYPlot) jfreechart.getPlot();
		DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis();
//        dateaxis.setDateFormatOverride(new SimpleDateFormat("HH:mm"));
		dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MINUTE, 1, new SimpleDateFormat("mm")));
		dateaxis.setAutoRange(true);

		frame1 = new ChartPanel(jfreechart, true);

		dateaxis.setLabelFont(new Font("黑体", Font.BOLD, 14)); // 水平底部标题
		dateaxis.setTickLabelFont(new Font("华文楷体", Font.BOLD, 12)); // 垂直标题
		ValueAxis rangeAxis = xyplot.getRangeAxis();// 获取柱状
		rangeAxis.setLabelFont(new Font("华文楷体", Font.BOLD, 15));
		jfreechart.getLegend().setItemFont(new Font("华文楷体", Font.BOLD, 15));
		jfreechart.getTitle().setFont(new Font("宋体", Font.BOLD, 20));// 设置标题字体
	}

	public void updateData(Object[] columnTitle, Object[][] tableData, String fileName, int[] picks) {
		XYDataset xydataset = createDataset(columnTitle, tableData, picks);
		xyplot.setDataset(xydataset);
	}

	private XYDataset createDataset(Object[] columnTitle, Object[][] tableData, int[] picks) { //

		TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		for (int a = 0; a < picks.length; a++) {
			if (picks[a] == 1) {
				TimeSeries timeseries = new TimeSeries(columnTitle[a].toString(), org.jfree.data.time.Second.class);

				for (Object[] datas : tableData) {

					try {
						timeseries.add(new Second(format.parse(datas[0].toString())),
								Double.valueOf(datas[a].toString()));

					} catch (NumberFormatException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (ParseException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

				timeseriescollection.addSeries(timeseries);
			}
		}

		return timeseriescollection;
	}

	public ChartPanel getChartPanel() {

		return frame1;

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值