Java Exceptions  «Prev  Next»

Modify Java Drawing Program - Exercise Result

You Said:

Student project:

Exception Handling
This is one possible solution:

Warning! Legacy Java Ahead

import java.applet.Applet;
import java.util.*;
import java.awt.*;
import java.awt.event.*;

public class Draw extends Applet implements MouseListener{
  Vector drawnShapes = new Vector();
  TextField tf;
  CheckboxGroup group = new CheckboxGroup();

  public void init() {
    Checkbox checkbox;

    setLayout(new BorderLayout());

    tf = new TextField(15);
    add("North", tf);

    Panel p = new Panel();

    checkbox = new Checkbox(null, group, true);
    checkbox.setBackground(Color.red);
    p.add(checkbox);

    checkbox = new Checkbox(null, group, false);
    checkbox.setBackground(Color.blue);
    p.add(checkbox);

    checkbox = new Checkbox(null, group, false);
    checkbox.setBackground(Color.green);
    p.add(checkbox);

    add("South", p);
    addMouseListener(this);
  }

  Shape makeShape()  throws ShapeException  {
    Shape s = null;
    String shapeString = tf.getText();
    if (shapeString.equals("Circle"))
      s = new Circle();
    else if (shapeString.equals("Square"))
      s = new Square();
    else
      throw new ShapeException();
    return s;
  }

  public void mousePressed(MouseEvent mouse_evt) {
     int x = mouse_evt.getX();
     int y = mouse_evt.getY();

     Checkbox checkbox;
     Shape s;

     try {
       s = makeShape();
       checkbox = group.getSelectedCheckbox();
       s.color = checkbox.getBackground();

       s.x = x;
       s.y = y;

       drawnShapes.addElement(s);
       repaint();
     }
     catch (ShapeException se) {
     }

     repaint();

  } // end mousePressed

   // other methods for MouseListener
  public void mouseClicked(MouseEvent mouse_evt){
  }

  public void mouseEntered(MouseEvent mouse_evt){
  }

  public void mouseExited(MouseEvent mouse_evt){
  }

  public void mouseReleased(MouseEvent mouse_evt){
  }

   public void paint(Graphics g) {
     Shape s;
     Enumeration e = drawnShapes.elements();
     while (e.hasMoreElements()) {
       s = (Shape)e.nextElement();
       s.draw(g);
     }
   } // end paint
} // end Draw

class ShapeException extends Exception {
}

abstract class Shape {
  Color color;
  int x;
  int y;
  int width = 20;

  abstract void draw(Graphics g);
 }

class Circle extends Shape {
  void draw(Graphics g) {
    g.setColor(this.color);
    g.fillOval(x, y, width, width);
  }
}

class Square extends Shape {
    void draw(Graphics g) {
      g.setColor(this.color);
      g.fillRect(x, y, width, width);
    }
}