import java.awt.*; import java.applet.*; import junior.*; class SinMove extends Atom { protected SinCosIcobj icobj; protected boolean direction; public SinMove(SinCosIcobj i,boolean b){ icobj = i; direction = b; } protected void action(){ icobj.sine(direction); } } class CosMove extends Atom { protected SinCosIcobj icobj; protected boolean direction; public CosMove(SinCosIcobj i,boolean b){ icobj = i; direction = b; } protected void action(){ icobj.cosine(direction); } } // The applet public class SinCos extends IcobjWorkspace { static int numColor = 0; static final Color[] color = {Color.green,Color.red,Color.blue,Color.yellow, Color.cyan, Color.orange, Color.pink, Color.magenta, Color.black}; ReactiveApplet reactive = new ReactiveApplet(this); Instruction sin(SinCosIcobj i){ return new Seq(new Await("sin"),new Loop(new Seq(new SinMove(i,true),new Stop()))); } Instruction cos(SinCosIcobj i){ return new Seq(new Await("cos"),new Loop(new Seq(new CosMove(i,true),new Stop()))); } void create(){ SinCosIcobj icobj = new SinCosIcobj(""); icobj.color = color[(numColor++)%color.length]; addIcobj(icobj); reactive.add(sin(icobj)); reactive.add(cos(icobj)); } public void init(){ Button sin = new Button("sin"); Button cos = new Button("cos"); Button sincos = new Button("sin+cos"); Button start = new Button("new circle"); sin.addMouseListener(new Action(reactive,"sin")); cos.addMouseListener(new Action(reactive,"cos")); sincos.addMouseListener(new Action(reactive,"sincos")); start.addMouseListener(new Add(this)); Panel p = new Panel(); p.setBackground(Color.lightGray); setLayout(new BorderLayout()); p.setLayout(new GridLayout(1, 5, 5, 20)); add("South", p); p.add(sin); p.add(cos); p.add(sincos); p.add(start); reactive.add(new Loop( new Seq( new Await("sincos"), new Seq( new Seq(new Generate("sin"),new Generate("cos")), new Stop())))); create(); mainThread = new Thread(reactive); mainThread.start(); } }