// // This uses the 1.1 and above AWT event model. // import java.applet.Applet; import java.awt.*; import java.awt.event.*; 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 kScopeNew extends java.applet.Applet implements MouseListener, KeyListener { // 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); this.addMouseListener(this); this.addKeyListener(this); } 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.1 event model", 32, 16); g.drawString(text, 32, 32); } public void mousePressed(MouseEvent e) { originX = e.getX(); originY = e.getY(); repaint(); } public void mouseClicked(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void keyReleased(KeyEvent e) { toggleDisplay = (toggleDisplay + 1) % MAX_DISPLAY; repaint(); } public void keyPressed(KeyEvent e) {} public void keyTyped(KeyEvent e) {} }