vincent.DynamicDataDemo.java Source code

Java tutorial

Introduction

Here is the source code for vincent.DynamicDataDemo.java

Source

/*
 * =========================================================== JFreeChart : a free chart library for
 * the Java(tm) platform =========================================================== (C) Copyright
 * 2000-2004, by Object Refinery Limited and Contributors. Project Info:
 * http://www.jfree.org/jfreechart/index.html This library is free software; you can redistribute it
 * and/or modify it under the terms of the GNU Lesser General Public License as published by the
 * Free Software Foundation; either version 2.1 of the License, or (at your option) any later
 * version. This library is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 * PURPOSE. See the GNU Lesser General Public License for more details. You should have received a
 * copy of the GNU Lesser General Public License along with this library; if not, write to the Free
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. [Java is a
 * trademark or registered trademark of Sun Microsystems, Inc. in the United States and other
 * countries.] -------------------- DynamicDataDemo.java -------------------- (C) Copyright
 * 2002-2004, by Object Refinery Limited. Original Author: David Gilbert (for Object Refinery
 * Limited). Contributor(s): -; $Id: DynamicDataDemo.java,v 1.12 2004/05/07 16:09:03 mungady Exp $
 * Changes ------- 28-Mar-2002 : Version 1 (DG);
 */

package vincent;

import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.io.BufferedWriter;
import java.io.IOException;

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.XYPlot;
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.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import vincent.serial3.TempSerialReader;

/**
 * A demonstration application showing a time series chart where you can dynamically add (random)
 * data by clicking on a button.
 */
public class DynamicDataDemo extends ApplicationFrame implements FloatPrinter {

    private static final long serialVersionUID = 3960766362937292369L;

    /** The time series data. */
    private TimeSeries series;

    private TempSerialReader tempSerialReader;
    private static Logger LOG = LoggerFactory.getLogger(DynamicDataDemo.class);

    private Label temperatureCouranteLabel;
    private Label tempsDeChauffeEtRelicat = new Label(
            "------------------------------------------------------------");
    private Label paramsPid = new Label(
            "-------------------------------------------------------------------------------------");

    /**
     * Constructs a new demonstration application.
     * 
     * @param title the frame title.
     */
    public DynamicDataDemo(final String title) {

        super(title);
        this.series = new TimeSeries("Random Data");
        final TimeSeriesCollection dataset = new TimeSeriesCollection(this.series);
        final JFreeChart chart = createChart(dataset);

        final ChartPanel chartPanel = new ChartPanel(chart);

        final JPanel content = new JPanel(new BorderLayout());
        content.add(chartPanel);
        chartPanel.setPreferredSize(new java.awt.Dimension(500, 300));
        setContentPane(content);

        // Zone de saisie de commande vers le port srie :
        TextField zoneSaisie = new TextField(10);
        chartPanel.add(zoneSaisie);
        zoneSaisie.setLocation(100, 300);
        zoneSaisie.validate();
        zoneSaisie.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                int key = e.getKeyCode();
                if (key == KeyEvent.VK_ENTER) {
                    TextField textField = (TextField) e.getComponent();

                    try {
                        BufferedWriter writer = tempSerialReader.getEcrivainPortSerie();
                        writer.write(textField.getText());
                        writer.write('\r');
                        writer.flush();
                    } catch (IOException l_ex) {
                        LOG.error("erreur d'criture sur le port srie: ", l_ex);
                    }
                }
            }
        });

        temperatureCouranteLabel = new Label("XX.XC");
        chartPanel.add(temperatureCouranteLabel);
        chartPanel.add(tempsDeChauffeEtRelicat);
        chartPanel.add(paramsPid);

        tempSerialReader = new TempSerialReader(this);
    }

    /**
     * Creates a sample chart.
     * 
     * @param dataset the dataset.
     * @return A sample chart.
     */
    private JFreeChart createChart(final XYDataset dataset) {
        final JFreeChart result = ChartFactory.createTimeSeriesChart("", "Temps", "Temprature", dataset, true,
                true, false);
        final XYPlot plot = result.getXYPlot();
        ValueAxis axis = plot.getDomainAxis();
        axis.setAutoRange(true);
        axis.setFixedAutoRange(60000.0); // 60 seconds
        axis = plot.getRangeAxis();
        axis.setRange(10.0, 50.0);// 50C
        return result;
    }

    /**
     * Starting point for the demonstration application.
     * 
     * @param args ignored.
     */
    public static void main(final String[] args) {
        final DynamicDataDemo demo = new DynamicDataDemo("Dynamic Data Demo");
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);

    }

    public void windowClosed(WindowEvent event) {
        tempSerialReader.close();
    }

    public void afficherDerniereTemperature(float floatToPrint) {
        this.series.add(new Millisecond(), floatToPrint);
        temperatureCouranteLabel.setText(floatToPrint + "C");
    }

    @Override
    public void setParamsPid(String params) {
        paramsPid.setText(params);
    }

    @Override
    public void setDureeDeChauffeEtRelicat(String chauffeEtRelicat) {
        tempsDeChauffeEtRelicat.setText(chauffeEtRelicat);

    }

}