import java.awt.*; import java.awt.image.*; import java.util.*; public class applet4 extends java.applet.Applet { Button eval = null; TextArea data = null; plot pl = null; double x[] = null; double y[] = null; Checkbox format_xy, format_y; TextField x0; Button new_data; Button clear_data; TextField dx; Label err; Panel p3; int started = 0; int neg_xdata = 0; int neg_ydata = 0; public applet4() { } public void init() { setBackground(Color.white); setLayout(new FlowLayout()); add(pl = new plot(this)); Panel p = new Panel(); p.setLayout(new GridLayout(2, 0, 0, 0)); Panel p2 = new Panel(); p2.setLayout(new FlowLayout(FlowLayout.LEFT)); p2.add(new Label(" Data: x, y =")); p2.add(data = new TextArea(3, 35)); p2.add(eval = new Button("Fit")); p2.add(new_data = new Button("Random")); p2.add(clear_data = new Button("Clear")); p.add(p2); p2 = new Panel(); p2.setLayout(new GridLayout(2, 0, 0, 0)); Panel p4 = new Panel(); p4.setLayout(new FlowLayout(FlowLayout.LEFT)); CheckboxGroup cbg = new CheckboxGroup(); p4.add(new Label("Data format:")); p4.add(format_xy = new Checkbox("x and y", cbg, true)); p4.add(format_y = new Checkbox("y only:", cbg, false)); p4.add(new Label(" Initial x:")); p4.add(x0 = new TextField("0.1", 8)); p4.add(new Label(" Delta x:")); p4.add(dx = new TextField("1", 8)); p2.add(p4); p3 = new Panel(); p3.setLayout(new FlowLayout(FlowLayout.LEFT)); p3.add(err = new Label("Syntax check: No error")); p2.add(p3); p.add(p2); add(p); //do_new_data(); } public void start() { if (started == 0) { do_new_data(); started = 1; } do_eval(); } public void paint(Graphics g) { //g.drawRect(0, 0, this.size().width - 1, this.size().height - 1); } public boolean action(Event evt, Object arg) { if (evt.target == eval) { do_eval(); } else if (evt.target == new_data) { do_new_data(); do_eval(); } else if (evt.target == clear_data) { do_clear_data(); //do_eval(); } return true; } void do_clear_data() { data.setText(""); } void do_eval() { parse_data(); if (x != null && y != null) pl.fit(x, y); } void set_err(String s) { err.setText("Syntax check: " + s + " "); p3.layout(); } void parse_data() { x = null; y = null; neg_xdata = 0; neg_ydata = 0; String s = data.getText(); Vector v = new Vector(); int i = 0; char c = 0; if (i < s.length()) c = s.charAt(i); else c = 0; while (c != 0) { while (Character.isSpace(c) || c == ',') { i ++; if (i < s.length()) c = s.charAt(i); else c = 0; } String s2 = ""; while (c != 0 && !Character.isSpace(c) && c != ',') { s2 = s2 + c; i ++; if (i < s.length()) c = s.charAt(i); else c = 0; } if (s2.length() > 0) { Double z = new Double(0); try { z = Double.valueOf(s2); } catch (NumberFormatException e) { set_err("Can't parse data"); return; } v.addElement(z); } } if (format_xy.getState()) { if (v.size() >= 4 && ((v.size() % 2) == 0)) { int n = v.size() / 2; x = new double[n]; y = new double[n]; for (i = 0; i < v.size(); i ++) { Double d = (Double) v.elementAt(i); double z = d.doubleValue(); //if (z <= 0) //{ //set_err("All X and Y values must be > 0"); //x = null; //y = null; //return; //neg_data = 1; //} if (i % 2 == 0) { x[i / 2] = z; if (z <= 0) neg_xdata = 1; } else { y[i / 2] = z; if (z <= 0) neg_ydata = 1; } } } else { set_err("Data length must be a multiple of 2"); return; } } else { if (v.size() >= 2) { int n = v.size(); x = new double[n]; y = new double[n]; double xx0 = 0.1; try { xx0 = Double.valueOf(x0.getText()).doubleValue(); } catch (NumberFormatException e) {} if (xx0 <= 0) { xx0 = 0.1; x0.setText(String.valueOf(xx0)); } double ddx = 1; try { ddx = Double.valueOf(dx.getText()).doubleValue(); } catch (NumberFormatException e) {} for (i = 0; i < v.size(); i ++) { double z = xx0 + i * ddx; if (z <= 0) { //set_err("All X and Y values must be > 0"); //x = null; //y = null; //return; neg_xdata = 1; } x[i] = z; Double d = (Double) v.elementAt(i); z = d.doubleValue(); if (z <= 0) { //set_err("All X and Y values must be > 0"); //x = null; //y = null; //return; neg_ydata = 1; } y[i] = z; } } else { set_err("There must be at least 2 data points"); return; } } set_err("No error"); } void do_new_data() { int n = 10; String s = ""; if (format_xy.getState()) { for (int i = 0; i < n; i ++) { double x = 100 * Math.random(); if (x < 0.1) x = 0.1; double y = 100 * Math.random(); if (y < 0.1) y = 0.1; if (i < n - 1) s += pl.format_num(x, 3) + ", " + pl.format_num(y, 3) + ",\n"; else s += pl.format_num(x, 3) + ", " + pl.format_num(y, 3); } } else { for (int i = 0; i < n; i ++) { double y = 100 * Math.random(); if (y < 0.1) y = 0.1; if (i < n - 1) s += pl.format_num(y, 3) + ",\n"; else s += pl.format_num(y, 3); } } data.setText(s); } }