package com.hitangjun.jfreechart.demo;
/**
* ============================================================= * JFreeChart开发:利用JFreeChart开发实时曲线 * ============================================================= */// 导入java2d包import java.awt.Color;import java.awt.Component;import java.awt.Dimension;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.BorderFactory;
import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.title.TextTitle;import org.jfree.data.time.Millisecond;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;import org.jfree.data.xy.XYSeries;import org.jfree.data.xy.XYSeriesCollection;import org.jfree.ui.RefineryUtilities;public class TimeSeriesDemo1 extends JFrame implements Runnable, ActionListener {
// 时序图数据集// private TimeSeries timeseries; private TimeSeries timeseries; XYSeries s3 = new XYSeries("次序值");// Value坐标轴初始值
private double lastValue;static Class class$org$jfree$data$time$Millisecond;
static Thread thread1;
private javax.swing.JPanel jPanel1; int step = 10;public static void main(String[] args) {
TimeSeriesDemo1 TimeSeriesDemo1 = new TimeSeriesDemo1(); TimeSeriesDemo1.pack(); RefineryUtilities.centerFrameOnScreen(TimeSeriesDemo1); TimeSeriesDemo1.setVisible(true); startThread(); }public void run() {
while (true) { try { // // 根据实际需要在此处加入需要执行的代码 double d = 0.9D + 0.2D * Math.random();// lastValue = lastValue * d;// Millisecond millisecond = new Millisecond();// System.out.println("Now=" + millisecond.toString());// timeseries.add(millisecond, lastValue);// Thread.sleep(300); // 根据实际需要在此处加入需要执行的代码// double d = 0.9D + 0.2D * Math.random(); lastValue = lastValue * d; System.out.println("step = "+step+",lastvalue = "+lastValue); s3.add(step, lastValue); step+=5; Thread.sleep(1000); } catch (InterruptedException e) { } } }private void initComponents(Component comp) {
jPanel1 = new javax.swing.JPanel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("窗口demo"); setLocationByPlatform(true); setResizable(false);jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("panel标题"));
jPanel1.setToolTipText("串口设置");javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 350, Short.MAX_VALUE) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGap(0, 180, Short.MAX_VALUE) );// jPanel1.add( comp );
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(19, 19, 19) .addComponent(comp, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap(472, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(19, 19, 19) .addComponent(comp, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap(117, Short.MAX_VALUE)) );jPanel1.getAccessibleContext().setAccessibleName("饭店");
pack(); } public static void startThread() { thread1.start(); }public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("EXIT")) { thread1.interrupt(); System.exit(0); } }public TimeSeriesDemo1() {
// super(new BorderLayout()); thread1 = new Thread(this); lastValue = 100D; // 创建时序图对象 timeseries = new TimeSeries( "Random Data", TimeSeriesDemo1.class$org$jfree$data$time$Millisecond != null ? TimeSeriesDemo1.class$org$jfree$data$time$Millisecond : (TimeSeriesDemo1.class$org$jfree$data$time$Millisecond = TimeSeriesDemo1 .getClass("org.jfree.data.time.Millisecond"))); TimeSeriesCollection timeseriescollection = new TimeSeriesCollection( timeseries); XYSeriesCollection dataset = new XYSeriesCollection(s3); dataset.addSeries( s3 ); // 创建图表面板 ChartPanel chartpanel = new ChartPanel( createChart(dataset)); chartpanel.setPreferredSize(new Dimension(500, 270));// JPanel jpanel = new JPanel();
// jpanel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));// 边距为4// JButton jbutton = new JButton("退出");// jbutton.setActionCommand("EXIT");// jbutton.addActionListener(this);// jpanel.add(jbutton);// getContentPane().add(chartpanel,"South");// getContentPane().add(jpanel, "South"); initComponents(chartpanel); }private JFreeChart createChart(XYDataset xydataset) {
JFreeChart jfreechart = ChartFactory.createXYLineChart("时序图例子", "时间", "温度值", xydataset, PlotOrientation.VERTICAL, true, true, false); XYPlot xyplot = jfreechart.getXYPlot(); // 横纵坐标设定 ValueAxis valueaxis = xyplot.getDomainAxis(); valueaxis.setRange( 1, 300D ); valueaxis.setAutoRange(true); valueaxis.setFixedAutoRange(300D);valueaxis = xyplot.getRangeAxis();
valueaxis.setRange(0.0D, 200D); configFont(jfreechart); return jfreechart; }static Class getClass(String s) {
Class cls = null; try { cls = Class.forName(s); } catch (ClassNotFoundException cnfe) { throw new NoClassDefFoundError(cnfe.getMessage()); } return cls; } /** * 配置字体 * @param chart JFreeChart 对象 */ private void configFont(JFreeChart chart){ // 配置字体 Font xfont = new Font("宋体",Font.PLAIN,12) ;// X轴 Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y轴 Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部 Font titleFont = new Font("隶书", Font.BOLD , 25) ; // 图片标题 XYPlot plot = chart.getXYPlot();// www.dwhao.com图形的绘制结构对象 // 图片标题 chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont)); // 底部 chart.getLegend().setItemFont(kfont); // X 轴 ValueAxis domainAxis = plot.getDomainAxis(); domainAxis.setLabelFont(xfont);// 轴标题 domainAxis.setTickLabelFont(xfont);// 轴数值 domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色// domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的label斜显示 // Y 轴 ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setLabelFont(yfont); rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色 rangeAxis.setTickLabelFont(yfont); }}