Mega Code Archive

 
Categories / Java / Advanced Graphics
 

Scroll Chart

import java.awt.*; import java.applet.*; import java.net.URL; import java.util.*; import graph.*; /************************************************************************* ** **    Applet example2a **                                              Version 1.0   August 1996 ** ************************************************************************** **    Copyright (C) 1996 Leigh Brookshaw ** **    This program is free software; you can redistribute it and/or modify **    it under the terms of the GNU General Public License as published by **    the Free Software Foundation; either version 2 of the License, or **    (at your option) any later version. ** **    This program 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 General Public License for more details. ** **    You should have received a copy of the GNU General Public License **    along with this program; if not, write to the Free Software **    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ************************************************************************** ** **    This is a simple applet that creates a Scroll Chart using the  **    Graph2D class library and double buffering ** *************************************************************************/ public class example2a extends Applet implements Runnable {       Graph2D graph;       Label title;       DataSet data1 = new DataSet();       Axis    yaxis_right;       Image    osi = null;       Graphics osg = null;       int iwidth  = 0;       int iheight = 0;       Thread runner = null;       Random random = new Random();       int count = 0; /* **    In milliseconds how often do we want to add a new data point. */       int period      = 500; /* **    Maximum number of points to display before scrolling the data */       int maximum        = 25;       URL markersURL; /* **    Initialize the applet. The Parameters passed are the title of the plot **    the marker file to use and the update period in milliseconds */       public void init() {         int i;         int j; /* **      Get the passed parameters */         String st       = "TITLE";         String mfile    = "marker.txt";         period   = 10; /* **      Create the Graph instance and modify the default behaviour */         graph = new Graph2D();         graph.zerocolor = new Color(0,255,0);         graph.borderTop    = 50;         graph.borderBottom = 50;         graph.setDataBackground(Color.black); /* **      Create the Title */         title = new Label(st, Label.CENTER);         title.setFont(new Font("TimesRoman",Font.PLAIN,25));         setLayout( new BorderLayout() );         add("North",  title);         add("Center", graph); /* **      Load a file containing Marker definitions */         try {            markersURL = this.getClass().getResource(mfile);            graph.setMarkers(new Markers(markersURL));         } catch(Exception e) {            System.out.println("Failed to create Marker URL!");         }   /* **      Modify the default Data behaviour */         data1.linecolor   = new Color(255,0,0);         data1.marker      = 1;         data1.markercolor = new Color(100,100,255); /* **      Setup the Axis. Attach it to the Graph2D instance, and attach the data **      to it. */         yaxis_right = graph.createAxis(Axis.RIGHT);         yaxis_right.attachDataSet(data1);         yaxis_right.setLabelFont(new Font("Helvetica",Font.PLAIN,20));         graph.attachDataSet(data1);       }       public void start() {   if(runner == null) {           runner = new Thread(this);           runner.start();         }       }       public void stop() {   if(runner != null) {           runner.stop();           runner = null;         }       }         public void run() {               int i =0;               double data[] = new double[2];               Graphics g;               while(true) {                    count++;                    if(count >= maximum) data1.delete(0,0);                    data[1] = (2.0*random.nextDouble()-1.0)*50.0;                    data[0] = count;                    try {                         data1.append(data,1);           }                    catch (Exception e) {                         System.out.println("Error appending Data!");                    }                    data1.yaxis.maximum =  50.0;                    data1.yaxis.minimum = -50.0;                                        g = graph.getGraphics();        if( osi == null || iwidth != graph.size().width                                    || iheight != graph.size().height  ) {                        iwidth = graph.size().width;                        iheight = graph.size().height;                        osi = graph.createImage(iwidth,iheight);                        osg = osi.getGraphics();                    }                    osg.setColor(this.getBackground());                    osg.fillRect(0,0,iwidth,iheight);                    osg.setColor(g.getColor());                    osg.clipRect(0,0,iwidth,iheight);                    graph.update(osg);                    g.drawImage(osi,0,0,graph);                    try {  Thread.sleep(period); }                    catch(Exception e) { }        }   }       public static void main(String[] a){          javax.swing.JFrame f = new javax.swing.JFrame();          Applet app = new example2();          app.init();                    f.getContentPane().add (app);          f.pack();          f.setSize (new Dimension (500, 500));          f.setVisible(true);       } }                          Graph-Scroll-Chart.zip( 198 k)