import java.applet.Applet; import netscape.javascript.JSObject; import java.awt.*; import java.awt.event.*; import com.jinsight.jetchart.*; public class AppJS extends Applet implements SerieListener { JSObject window; public void init() { // Gets a reference to this applet window object. window = JSObject.getWindow(this); setLayout(new BorderLayout()); // Creates a Graph object. Graph graph = new Graph(); // Creates a line series. LineSerie ls = new LineSerie(); ls.setColor(Color.blue); ls.setValues(new double[] { 80, 50, 30, 100,40,200,100,20,10,40,70,80 }); graph.addSerie(ls); // Registers this applet as a SerieListener object, to receive mouse events // from the chart context. graph.addSerieListener(this); // Enables data point dragging. graph.setSerieDraggingEnabled(true); add(graph); } // Handles clicks on data points. public void serieClicked(SerieEvent evt) { // Gets the index of the data point. int index = evt.getElementIndex(); // Gets the value of the data point. LineSerie ls = (LineSerie)evt.getSerie(); double[] d = ls.getValues(); double dd = d[index]; // Evaluates a javascript expression, showing an alert box. String msg = "Data point value: "+dd; window.eval("javascript:alert('"+msg+"')"); } // Handles data point dragging. public void serieDragged(SerieEvent evt) { int index = evt.getElementIndex(); LineSerie ls = (LineSerie)evt.getSerie(); double[] d = ls.getValues(); double dd = d[index]; // Calls a Javascript function to communicate with another applet. window.call("dragged",new Object[]{new Integer(index),new Double(dd)}); // Calls the mouseMoved handler to update the window text field when // a data point is dragged. mouseMoved(evt); } // Handles mouse-move events on data point. public void mouseMoved(SerieEvent evt) { int index = evt.getElementIndex(); // A flag to prevent execution of the following code when cursor // is not on a data point. boolean hasCleaned=false; if (index != -1) { LineSerie ls = (LineSerie) evt.getSerie(); double[] d = ls.getValues(); double dd = d[index]; // The text field can be updated either by calling a Javascript // function called 'moved' or setting its value property directly. //window.call("moved", new Double[] { new Double(dd) }); JSObject doc = (JSObject)window.getMember("document"); JSObject form = (JSObject)doc.getMember("form"); JSObject text = (JSObject)form.getMember("text"); text.setMember("value",""+dd); hasCleaned=false; } else if (!hasCleaned) { // Cleans the text field. window.call("cleanText",null); hasCleaned=true; } } public void serieReleased(SerieEvent evt) { } }