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