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);
}
}