/* Programmer: Konstantin Lukin E-mail : lukink@ug.cs.sunysb.edu */ import java.awt.*; import java.applet.*; import java.net.*; public class GraphCanvas extends Panel { private boolean loaded; private Image degree, armstrong, theta, lambda; private static final int WIDTH = 600; private static final int HEIGHT = 250; private static final int MARGIN = 90; private int width = 600; private int height = 350; private boolean detailsOnScreen = false; private Button button; private int length; private Bragg bragg; private SineWave[] sine; private Segment[] beam; private Segment[] plane; private Segment[] dash; private Handle[] handle; private Rectangle detailBox; private Details details; private Image offImage; private Graphics offGraphics; private Font font = new Font("Helvetica", Font.BOLD, 12); private FontMetrics fm; private UserInterface applet; //--------------------CONSTRUCTOR------------------------ public GraphCanvas(UserInterface _applet) { applet = _applet; loaded = false; bragg = new Bragg(Bragg.FORMULA, 3, 3, 30); sine = new SineWave[4]; beam = new Segment[4]; plane = new Segment[2]; dash = new Segment[3]; handle = new Handle[2]; details = new Details(10,10,WIDTH/2-20,HEIGHT-20); try { URL url; url = new URL(applet.getCodeBase(), "degree.gif"); degree = applet.getImage(url); url = new URL(applet.getCodeBase(), "armstron.gif"); armstrong = applet.getImage(url); url = new URL(applet.getCodeBase(), "theta.gif"); theta = applet.getImage(url); url = new URL(applet.getCodeBase(), "lambda.gif"); lambda = applet.getImage(url); } catch(MalformedURLException e) {applet.showStatus("Exception: "+e);} } //--------------------UPDATE---------------------------- public void paint(Graphics g) { if (!loaded) { loadLayout(); loaded = true; offImage = this.createImage(WIDTH, HEIGHT); offGraphics = offImage.getGraphics(); offGraphics.setFont(font); fm = offGraphics.getFontMetrics(); } update(g); } public void update(Graphics g) { drawBackground(); if (bragg==null) drawStart(); else { drawGraph(); if(detailsOnScreen) details.draw(offGraphics, sine[2], sine[3], bragg); } g.drawImage(offImage, 0, 0, null); } //-------------------------SET GRAPH--------------------------- public synchronized void setGraph(Bragg be) { bragg = be; repaint(); } //-------------------------MOUSE ACTIONS---------------------- public boolean action(Event evt, Object arg) { if(evt.target instanceof Button) { detailsOnScreen =! detailsOnScreen; if(detailsOnScreen) button.setLabel("close"); else button.setLabel("details"); } else return super.action(evt, arg); repaint(); return true; } public boolean mouseDown(Event evt, int x, int y) { for(int i=0; i