// // This uses the 1.0 event model. // import java.applet.*; import java.awt.*; abstract class Drawings { abstract void render(Graphics g, int x, int y); static final int DRAW = 0; static final int FILL = 1; protected int random(double range) { return ((int) (Math.random() * range)); } protected int random(int range) { return (random((double) range)); } void pickColor(Graphics g) { int red = random(256); int green = random(256); int blue = random(256); Color color = new Color(red, green, blue); g.setColor(color); } } class Circles extends Drawings { private int circleType = DRAW; public Circles() { circleType = DRAW; } public Circles(int circleType) { this.circleType = circleType; } void render(Graphics g, int originX, int originY) { int iters = random(30)+2; int width = random(30)+2; for (int i = iters; i >= 0; --i) { pickColor(g); switch (this.circleType) { case DRAW: g.drawOval(originX-(i*width/2), originY-(i*width/2), i*width, i*width); break; case FILL: g.fillOval(originX-(i*width/2), originY-(i*width/2), i*width, i*width); break; } } } } class Boxes extends Drawings { private int boxType = DRAW; private boolean is3D = false; public Boxes() { boxType = DRAW; is3D = false; } public Boxes(int boxType, boolean is3D) { this.boxType = boxType; this.is3D = is3D; } void render(Graphics g, int originX, int originY) { int iters = random(30)+2; int width = random(30)+2; for (int i = iters; i >= 0; --i) { pickColor(g); switch (this.boxType) { case DRAW: if (is3D) { g.draw3DRect(originX-(i*width/2), originY-(i*width/2), i*width, i*width, true); } else { g.drawRect(originX-(i*width/2), originY-(i*width/2), i*width, i*width); } break; case FILL: if (is3D) { g.fill3DRect(originX-(i*width/2), originY-(i*width/2), i*width, i*width, true); } else { g.fillRect(originX-(i*width/2), originY-(i*width/2), i*width, i*width); } break; } } } } public class kScope extends java.applet.Applet { // Globals. int originX = 256; int originY = 256; int toggleDisplay = 0; final int MAX_DISPLAY = 7; Circles drawCircle; Circles fillCircle; Boxes drawBox; Boxes draw3DBox; Boxes fillBox; Boxes fill3DBox; // Methods. public void init() { System.out.println("init"); drawCircle = new Circles(Circles.DRAW); fillCircle = new Circles(Circles.FILL); drawBox = new Boxes(Boxes.DRAW, false); draw3DBox = new Boxes(Boxes.DRAW, true); fillBox = new Boxes(Boxes.FILL, false); fill3DBox = new Boxes(Boxes.FILL, true); } public void start() { System.out.println("start"); } public void stop() { System.out.println("stop"); } public void destroy() { System.out.println("destroy"); drawCircle = null; fillCircle = null; drawBox = null; draw3DBox = null; fillBox = null; fill3DBox = null; } public void paint(Graphics g) { String text; g.setColor(Color.black); g.fillRect(0, 0, 511, 511); text = ""; // prevent compiler whining switch (toggleDisplay) { case 0: drawCircle.render(g, originX, originY); text = "Circles"; break; case 1: fillCircle.render(g, originX, originY); text = "Filled Circles"; break; case 2: drawBox.render(g, originX, originY); text = "Boxes"; break; case 3: draw3DBox.render(g, originX, originY); text = "3D Boxes"; break; case 4: fillBox.render(g, originX, originY); text = "Filled Boxes"; break; case 5: fill3DBox.render(g, originX, originY); text = "Filled 3D Boxes"; break; case 6: drawCircle.render(g, originX, originY); fillCircle.render(g, originX, originY); drawBox.render(g, originX, originY); draw3DBox.render(g, originX, originY); fillBox.render(g, originX, originY); fill3DBox.render(g, originX, originY); text = "Kaleidescope!"; break; } g.setColor(Color.white); g.drawString("AWT version 1.0 event model", 32, 16); g.drawString(text, 32, 32); } public boolean mouseDown(java.awt.Event evt, int x, int y) { originX = x; originY = y; repaint(); return true; } public boolean keyUp(Event evt, int key) { toggleDisplay = (toggleDisplay + 1) % MAX_DISPLAY; repaint(); return true; } }