import java.applet.*; import javax.swing.*; import java.awt.geom.*; import edu.jsu.leathrum.mathlets.shared.*; import java.text.ParsePosition; import java.awt.Font; import java.awt.Color; import java.awt.Graphics2D; import java.awt.FlowLayout; public class Parabola extends AMathlet { private class GraphCanvas extends ASimpleGraphCanvas { double a = 1.0; double b = 0.0; double c = 0.0; public GraphCanvas(int initialWidth, int initialHeight, int scale) { super(initialWidth, initialHeight, scale); } public void setValues(double newa, double newb, double newc) { a = newa; b = newb; c = newc; } private double f(double x) { return ((a*x*x)+(b*x)+c); } protected void drawFigure(Graphics2D g) { double p; GeneralPath par = new GeneralPath(); p = trinv.transform(new Point2D.Double(0,0),null).getX(); par.moveTo((float) p, (float) f(p)); for (int x = 1; x < wd; x++) { p = trinv.transform(new Point2D.Double(x,0),null).getX(); par.lineTo((float) p, (float) f(p)); } g.setPaint(Color.blue); g.draw(tr.createTransformedShape(par)); } } private class EqnSet extends JPanel { DblButtonSet aButtons = new DblButtonSet(); DblButtonSet bButtons = new DblButtonSet(); DblButtonSet cButtons = new DblButtonSet(); FormattedLabel eqn = new FormattedLabel(); Box b0, b1; public EqnSet () { b0 = new Box(BoxLayout.X_AXIS); b1 = new Box(BoxLayout.Y_AXIS); b0.add(Box.createHorizontalGlue()); b0.add(eqn); b0.add(Box.createHorizontalGlue()); b1.add(b0); b0 = new Box(BoxLayout.X_AXIS); b0.add(Box.createHorizontalGlue()); b0.add(aButtons); b0.add(bButtons); b0.add(cButtons); b0.add(Box.createHorizontalGlue()); b1.add(b0); add(b1); aButtons.setRepeat(); bButtons.setRepeat(); cButtons.setRepeat(); setOpaque(false); eqn.setFontStyle(Font.BOLD); eqn.setFontSize(14); } public void setText(String text) { eqn.setText(text); } public double getaValue() { return aButtons.getValue(); } public double getbValue() { return bButtons.getValue(); } public double getcValue() { return cButtons.getValue(); } public void setaValue(double newa) { aButtons.setValue(newa); } public void setbValue(double newb) { bButtons.setValue(newb); } public void setcValue(double newc) { cButtons.setValue(newc); } public void setValues(double a, double b, double c) { aButtons.setValue(a); bButtons.setValue(b); cButtons.setValue(c); } public void setNames(String a, String b, String c) { aButtons.setName(a); bButtons.setName(b); cButtons.setName(c); } public void setAction(ActionWrapper act) { aButtons.setButtonAction(act); bButtons.setButtonAction(act); cButtons.setButtonAction(act); } public void registerFields(String a, String b, String c) { setHandler(a, aButtons); setHandler(b, bButtons); setHandler(c, cButtons); } public void setToDefaults(double defa, double defb, double defc) { aButtons.setDefault(defa); aButtons.setToDefault(); bButtons.setDefault(defb); bButtons.setToDefault(); cButtons.setDefault(defc); cButtons.setToDefault(); } } GraphCanvas graph = new GraphCanvas(300,300,15); JPanel buttonPanel = new JPanel(); EqnSet stdEqn = new EqnSet(); EqnSet genEqn = new EqnSet(); JButton clearButton = new JButton("clear"); Box b0, b1; public Parabola() { this.getContentPane().setBackground(Color.white); this.getContentPane().setLayout(new FlowLayout()); this.getContentPane().add(graph); b1 = new Box(BoxLayout.Y_AXIS); b1.add(stdEqn); class GenAction implements ActionWrapper { public void doThis() { genCompute(); draw(); } } stdEqn.setAction(new GenAction()); b1.add(genEqn); class StdAction implements ActionWrapper { public void doThis() { stdCompute(); draw(); } } genEqn.setAction(new StdAction()); b0 = new Box(BoxLayout.X_AXIS); b0.add(Box.createHorizontalGlue()); b0.add(clearButton); b0.add(Box.createHorizontalGlue()); b1.add(b0); this.getContentPane().add(b1); clearButton.setOpaque(false); } public void draw() { graph.setValues(genEqn.getaValue(), genEqn.getbValue(), genEqn.getcValue()); graph.repaint(); } private void genCompute() { double a = stdEqn.getaValue(); double h = stdEqn.getbValue(); double k = stdEqn.getcValue(); double b = -2*a*h; double c = k+a*h*h; genEqn.setValues(a, b, c); } private void stdCompute() { double a = genEqn.getaValue(); double b = genEqn.getbValue(); double c = genEqn.getcValue(); double h = -1*b/(2*a); double k = c-b*b/(4*a); stdEqn.setValues(a, h, k); } public void localinit() { AMathlet.getNumberFormat().setMaximumFractionDigits(1); stdEqn.setText(AMathlet.getProperty("Parabola.stdeqn")); genEqn.setText(AMathlet.getProperty("Parabola.geneqn")); stdEqn.setNames(AMathlet.getProperty("consta"), AMathlet.getProperty("consth"), AMathlet.getProperty("constk")); stdEqn.registerFields("a1", "h", "k"); stdEqn.setToDefaults(1.0, 0.0, 0.0); genEqn.setNames(AMathlet.getProperty("consta"), AMathlet.getProperty("constb"), AMathlet.getProperty("constc")); genEqn.registerFields("a2", "b", "c"); genEqn.setToDefaults(1.0, 0.0, 0.0); graph.setValues(genEqn.getaValue(), genEqn.getbValue(), genEqn.getcValue()); registerClearButton(clearButton); } }