• JFreeChart开发:利用JFreeChart开发实时曲线


    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);  
            
        }

    }

  • 相关阅读:
    Ansi,UTF8,Unicode,ASCII编码的区别
    Delphi 快捷键
    Sql Server2008恢复备份数据库问题
    js图片无缝滚动代码
    SQL Server 2008 清空删除日志文件 130G日志 10秒内变10M .
    JavaScript_循环26个英文字母的方法 .
    iframe跨子域
    sql数据库该名字
    大型网站架构的优化与架构演变(整理) .转自网络
    删除SQL日志语句,经测试8G日志文件都可以删除
  • 原文地址:https://www.cnblogs.com/haichun/p/3496335.html
Copyright © 2020-2023  润新知