// JDraw - DrawCanvas class
// Written by Jim Calciano, Melanie Lear, and PJ Waskiewicz
// November 18, 1998
// Class that creates the canvas on which we draw our objects
// This class will paint all our objects on the canvas

import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.util.Enumeration;

public class DrawCanvas extends Canvas implements MouseMotionListener,MouseListener,KeyListener{
  private Point initPoint;
  private Point endPoint, previous;
  private int shape;
  public Vector objects;
  private int length;
  private Color color = Color.blue;
  private Graphics graphics;
  private int bigx,smallx,smally,bigy;
  public DrawCanvas(){
    addMouseMotionListener(this);
    addMouseListener(this);
    addKeyListener(this);
    objects = new Vector(0);   //Initialize vector of objects
    length = 0;
    setVisible(true);
  }
  public void keyPressed(KeyEvent e){
    if(e.getKeyCode()==KeyEvent.VK_DELETE){
      if(objects.size() > 0){
        if((objects.elementAt(objects.size()-1).toString()).regionMatches(0,"S",0,1)){
          objects.removeElementAt(objects.size()-1);
          repaint();
        }
      }
    }
  }
  public void keyReleased(KeyEvent e){}
  public void keyTyped(KeyEvent e){}
  public void giveMeFocus(){
    requestFocus();
  }
  public void mouseClicked(MouseEvent e){
  }
  public void mouseEntered(MouseEvent e){
  }
  public void mouseExited(MouseEvent e){
  }
  public void mousePressed(MouseEvent e){
    // Check if selected objects were clicked on
    if(shape==6){
      initPoint=new Point(e.getX(),e.getY());
      previous=new Point(e.getX(),e.getY());
      for(int i=0; i<objects.size(); i++)
        ((DrawObject)(objects.elementAt(i))).intersects(e.getX(),e.getY());
    }
    else{
      initPoint = new Point(e.getX(), e.getY());
      previous = new Point(e.getX(), e.getY());
    }
  }
  public void thisShape(int shape){
    this.shape = shape;
  }
  public void mouseReleased(MouseEvent e){
    endPoint = new Point(e.getX(), e.getY());
    //Determine the drawn shape and create a new object of that type.  
    //Then add it to the vector and repaint.
    switch(shape){
    case 1:
      Line line = new Line(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
      objects.addElement(line);
      length++;
      repaint();
      break;
    case 2:
      Rect rect = new Rect(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
      objects.addElement(rect);
      length++;
      repaint();
      break;
    case 3:
      Oval oval = new Oval(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
      objects.addElement(oval);
      length++;
      repaint();
      break; 
    case 4:
      FRect frect = new FRect(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
      objects.addElement(frect);
      length++;
      repaint();
      break;
    case 5:
      FOval foval = new FOval(initPoint.x, initPoint.y, endPoint.x, endPoint.y, color);
      objects.addElement(foval);
      length++;
      repaint();
      break;
    case 6:
      for(int i = (objects.size()-1); i >= 0; i--){
        if(((DrawObject)(objects.elementAt(i))).intersects(endPoint.x,endPoint.y)){
          Point p1;
          Point p2;
          Color c;
          p1=((DrawObject)(objects.elementAt(i))).firstSelPoint();
          p2=((DrawObject)(objects.elementAt(i))).secondSelPoint();
          c=((DrawObject)(objects.elementAt(i))).selColor();
          SLine sl=new SLine(p1.x,p1.y,p2.x,p2.y,c);
          SRect sr=new SRect(p1.x,p1.y,p2.x,p2.y,c);
          SFRect sfr=new SFRect(p1.x,p1.y,p2.x,p2.y,c);
          SOval so=new SOval(p1.x,p1.y,p2.x,p2.y,c);
          SFOval sfo=new SFOval(p1.x,p1.y,p2.x,p2.y,c);
          if((objects.elementAt(i).toString()).regionMatches(0,"Line",0,4)){
            objects.removeElementAt(i);
            objects.insertElementAt(sl,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sl.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"Rect",0,4)){
            objects.removeElementAt(i);
            objects.insertElementAt(sr,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sr.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"FRect",0,5)){
            objects.removeElementAt(i);
            objects.insertElementAt(sfr,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sfr.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"Oval",0,4)){
            objects.removeElementAt(i);
            objects.insertElementAt(so,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            so.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"FOval",0,5)){
            objects.removeElementAt(i);
            objects.insertElementAt(sfo,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sfo.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"SLine",0,5)){
            objects.removeElementAt(i);
            objects.insertElementAt(sl,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sl.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"SRect",0,5)){
            objects.removeElementAt(i);
            objects.insertElementAt(sr,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sr.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"SFRect",0,6)){
            objects.removeElementAt(i);
            objects.insertElementAt(sfr,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sfr.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"SOval",0,5)){
            objects.removeElementAt(i);
            objects.insertElementAt(so,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            so.youAreSelected(true);
          }
          else if((objects.elementAt(i).toString()).regionMatches(0,"SFOval",0,6)){
            objects.removeElementAt(i);
            objects.insertElementAt(sfo,objects.size());
            for(int j=0; j<objects.size(); j++)
              ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
            sfo.youAreSelected(true);
          }
          repaint();
          break;
        }
        else{
          for(int j=0; j<objects.size(); j++)
            ((DrawObject)(objects.elementAt(j))).youAreSelected(false);
          for(int j=0; j<objects.size(); j++){
            if((objects.elementAt(j).toString()).regionMatches(0,"SLine",0,5)){
              Point p1=((SLine)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SLine)(objects.elementAt(j))).secondSelPoint();
              Color c=((SLine)(objects.elementAt(j))).selColor();
              objects.setElementAt(new Line(p1.x,p1.y,p2.x,p2.y,c),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SRect",0,5)){
              Point p1=((SRect)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SRect)(objects.elementAt(j))).secondSelPoint();
              Color c=((SRect)(objects.elementAt(j))).selColor();
              objects.setElementAt(new Rect(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SFRect",0,6)){
              Point p1=((SFRect)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SFRect)(objects.elementAt(j))).secondSelPoint();
              Color c=((SFRect)(objects.elementAt(j))).selColor();
              objects.setElementAt(new FRect(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SOval",0,5)){
              Point p1=((SOval)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SOval)(objects.elementAt(j))).secondSelPoint();
              Color c=((SOval)(objects.elementAt(j))).selColor();
              objects.setElementAt(new Oval(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SFOval",0,6)){
              Point p1=((SFOval)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SFOval)(objects.elementAt(j))).secondSelPoint();
              Color c=((SFOval)(objects.elementAt(j))).selColor();
              objects.setElementAt(new FOval(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
          }
        }
      }
      for(int i=0; i<objects.size(); i++){
        if(((DrawObject)(objects.elementAt(i))).areYouSelected()){
          for(int j=0; j<i; j++){
            if((objects.elementAt(j).toString()).regionMatches(0,"SLine",0,5)){
              Point p1=((SLine)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SLine)(objects.elementAt(j))).secondSelPoint();
              Color c=((SLine)(objects.elementAt(j))).selColor();
              objects.setElementAt(new Line(p1.x,p1.y,p2.x,p2.y,c),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SRect",0,5)){
              Point p1=((SRect)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SRect)(objects.elementAt(j))).secondSelPoint();
              Color c=((SRect)(objects.elementAt(j))).selColor();
              objects.setElementAt(new Rect(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SFRect",0,6)){
              Point p1=((SFRect)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SFRect)(objects.elementAt(j))).secondSelPoint();
              Color c=((SFRect)(objects.elementAt(j))).selColor();
              objects.setElementAt(new FRect(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SOval",0,5)){
              Point p1=((SOval)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SOval)(objects.elementAt(j))).secondSelPoint();
              Color c=((SOval)(objects.elementAt(j))).selColor();
              objects.setElementAt(new Oval(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
            else if((objects.elementAt(j).toString()).regionMatches(0,"SFOval",0,6)){
              Point p1=((SFOval)(objects.elementAt(j))).firstSelPoint();
              Point p2=((SFOval)(objects.elementAt(j))).secondSelPoint();
              Color c=((SFOval)(objects.elementAt(j))).selColor();
              objects.setElementAt(new FOval(p1.x,p1.y,p2.x,p2.y,c,null),j);
            }
          }
        }
      }
    }
    repaint();
  }

  //Function to set the color in the canvas.
  public void setSelectedColor(Color c){
    color = c;
    if(objects.size() > 0){
      if((objects.elementAt(objects.size()-1).toString()).regionMatches(0,"S",0,1)){
        ((DrawObject)(objects.elementAt(objects.size()-1))).setSelColor(c);
        repaint();
      }
    }
  }
  public void mouseMoved(MouseEvent e){
  }
  public void mouseDragged(MouseEvent e){    
    Graphics g = getGraphics();
    g.setColor(Color.black);
    g.setXORMode(getBackground());
    //Draw in XOR mode over the previous shape then draw in the new location.
    //Save the current point for use in erasing next time.
    switch(shape){
    case 1:
      g.drawLine(initPoint.x, initPoint.y, previous.x, previous.y);
      g.drawLine(initPoint.x, initPoint.y, e.getX(), e.getY());
      previous = new Point(e.getX(), e.getY());
      break;
    case 2:
      Point curr = new Point(e.getX(), e.getY());
      if (previous.x>initPoint.x){
        bigx = previous.x;
        smallx = initPoint.x;
      }
      else {
        bigx = initPoint.x;
        smallx = previous.x;
      }
      if (previous.y>initPoint.y) {
        bigy=previous.y;
        smally=initPoint.y;
      }
      else{
        bigy=initPoint.y;
        smally=previous.y;
      }
      g.drawRect(smallx, smally, bigx-smallx, bigy-smally);
      if (curr.x>initPoint.x){
        bigx = curr.x;
        smallx = initPoint.x;
      }
      else {
        bigx = initPoint.x;
        smallx = curr.x;
      }
      if (curr.y>initPoint.y) {
        bigy=curr.y;
        smally=initPoint.y;
      }
      else{
        bigy=initPoint.y;
        smally=curr.y;
      }
      g.drawRect(smallx,smally, bigx-smallx, bigy-smally);
      previous = new Point(e.getX(), e.getY());
      break; 
    case 3:
      Point cur = new Point(e.getX(), e.getY());
      g.drawOval(initPoint.x-Math.abs(previous.x-initPoint.x), 
                 initPoint.y-Math.abs(previous.y-initPoint.y), 
                 2*Math.abs(previous.x-initPoint.x), 
                 2*Math.abs(previous.y-initPoint.y));
      g.drawOval(initPoint.x-Math.abs(cur.x-initPoint.x), 
                 initPoint.y-Math.abs(cur.y-initPoint.y), 
                 2*Math.abs(cur.x-initPoint.x), 
                 2*Math.abs(cur.y-initPoint.y));
      previous = new Point(e.getX(), e.getY());
      break;
    case 4:
      Point cu = new Point(e.getX(), e.getY());
      if (previous.x>initPoint.x){
        bigx = previous.x;
        smallx = initPoint.x;
      }
      else {
        bigx = initPoint.x;
        smallx = previous.x;
      }
      if (previous.y>initPoint.y) {
        bigy=previous.y;
        smally=initPoint.y;
      }
      else{
        bigy=initPoint.y;
        smally=previous.y;
      }
      g.fillRect(smallx, smally, bigx-smallx, bigy-smally);
      if (cu.x>initPoint.x){
        bigx = cu.x;
        smallx = initPoint.x;
      }
      else {
        bigx = initPoint.x;
        smallx = cu.x;
      }
      if (cu.y>initPoint.y) {
        bigy=cu.y;
        smally=initPoint.y;
      }
      else{
        bigy=initPoint.y;
        smally=cu.y;
      }
      g.fillRect(smallx,smally, bigx-smallx, bigy-smally);
      previous = new Point(e.getX(), e.getY());
      break; 
    case 5:
      Point c = new Point(e.getX(), e.getY());
      g.fillOval(initPoint.x-Math.abs(previous.x-initPoint.x), 
                 initPoint.y-Math.abs(previous.y-initPoint.y), 
                 2*Math.abs(previous.x-initPoint.x), 
                 2*Math.abs(previous.y-initPoint.y));
      g.fillOval(initPoint.x-Math.abs(c.x-initPoint.x), 
                 initPoint.y-Math.abs(c.y-initPoint.y), 
                 2*Math.abs(c.x-initPoint.x), 2*Math.abs(c.y-initPoint.y));
      previous = new Point(e.getX(), e.getY());
      break;
    case 6:
      for(int i=0; i<objects.size(); i++){
        if((objects.elementAt(i).toString()).regionMatches(0,"SLine",0,5)){
          if(((SLine)(objects.elementAt(i))).getIfObjectClicked()){
            // This is when we move the object, not resize
            initPoint=new Point(e.getX(),e.getY());
            Point p1,p2;
            p1=((SLine)(objects.elementAt(i))).firstSelPoint();
            p2=((SLine)(objects.elementAt(i))).secondSelPoint();
            int disX, disY;
            disX=initPoint.x-previous.x;
            disY=initPoint.y-previous.y;
            g.setColor(((SLine)(objects.elementAt(i))).selColor());
            g.drawLine(p1.x,p1.y,p2.x,p2.y);
            g.drawLine(p1.x+disX,p1.y+disY,p2.x+disX,p2.y+disY);
            g.setColor(Color.black);
            g.fillRect(p1.x-3,p1.y-3,6,6);
            g.fillRect(p2.x-3,p2.y-3,6,6);
            g.fillRect(p1.x+disX-3,p1.y+disY-3,6,6);
            g.fillRect(p2.x+disX-3,p2.y+disY-3,6,6);
            ((SLine)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY);
            ((SLine)(objects.elementAt(i))).setSecondPoint(p2.x+disX,p2.y+disY);
            previous=new Point(initPoint.x,initPoint.y);
          }  
          else if(((SLine)(objects.elementAt(i))).getIfHandleClicked()){
            if(((SLine)(objects.elementAt(i))).getPickedHandle() == 1){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SLine)(objects.elementAt(i))).firstSelPoint();
              p2=((SLine)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y-3,6,6);
              g.fillRect(p2.x-3,p2.y-3,6,6);
              g.setColor(((SLine)(objects.elementAt(i))).selColor());
              g.drawLine(p1.x,p1.y,p2.x,p2.y);
              g.drawLine(initPoint.x,initPoint.y,p2.x,p2.y);
              g.setColor(Color.black);
              g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
              g.fillRect(p2.x-3,p2.y-3,6,6);
              ((SLine)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y);
              ((SLine)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            else {
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SLine)(objects.elementAt(i))).firstSelPoint();
              p2=((SLine)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y-3,6,6);
              g.fillRect(p2.x-3,p2.y-3,6,6);
              g.setColor(((SLine)(objects.elementAt(i))).selColor());
              g.drawLine(p1.x,p1.y,p2.x,p2.y);
              g.drawLine(p1.x,p1.y,initPoint.x,initPoint.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y-3,6,6);
              g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
              ((SLine)(objects.elementAt(i))).setFirstPoint(p1.x,p1.y);
              ((SLine)(objects.elementAt(i))).setSecondPoint(initPoint.x,initPoint.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
          }
        }
        else if((objects.elementAt(i).toString()).regionMatches(0,"SRect",0,5)){
          if(((SRect)(objects.elementAt(i))).getIfObjectClicked()){
            initPoint=new Point(e.getX(),e.getY());
            Point p1,p2;
            p1=((SRect)(objects.elementAt(i))).firstSelPoint();
            p2=((SRect)(objects.elementAt(i))).secondSelPoint();
            int disX, disY;
            disX=initPoint.x-previous.x;
            disY=initPoint.y-previous.y;
            g.setColor(((SRect)(objects.elementAt(i))).selColor());
            g.drawRect(p1.x,p1.y,p2.x,p2.y);
            g.setColor(Color.black);
            g.fillRect(p1.x-3,p1.y-3,6,6);
            g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
            g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
            g.fillRect(p1.x+(p2.x)-3,p1.y+(p2.y)-3,6,6);
            //
            g.setColor(((SRect)(objects.elementAt(i))).selColor());
            g.drawRect(p1.x+disX, p1.y+disY,p2.x,p2.y);
            g.setColor(Color.black);
            g.fillRect(p1.x-3+disX,p1.y-3+disY,6,6);
            g.fillRect(p1.x+(p2.x)-3+disX,p1.y+disY-3,6,6);
            g.fillRect(p1.x-3+disX,p1.y+(p2.y)-3+disY,6,6);
            g.fillRect(p1.x+(p2.x)-3+disX,p1.y+(p2.y)-3+disY,6,6);
            ((SRect)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY); 
            previous=new Point(initPoint.x,initPoint.y);
          }
          else if (((SRect)(objects.elementAt(i))).getIfHandleClicked()){
            if(((SRect)(objects.elementAt(i))).getPickedHandle() == 1){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SRect)(objects.elementAt(i))).firstSelPoint();
              p2=((SRect)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y-3,6,6);
              g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
              g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
              g.setColor(((SRect)(objects.elementAt(i))).selColor());
              g.drawRect(p1.x,p1.y,p2.x,p2.y);
              p2.x+=p1.x-initPoint.x;
              p2.y+=p1.y-initPoint.y;
              g.drawRect(initPoint.x,initPoint.y,p2.x,p2.y);
              g.setColor(Color.black);
              g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
              g.fillRect(initPoint.x+(p2.x)-3,initPoint.y-3,6,6);
              g.fillRect(initPoint.x-3,initPoint.y+(p2.y)-3,6,6);
              ((SRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y);
              ((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SRect)(objects.elementAt(i))).getPickedHandle() == 3){
             initPoint=new Point(e.getX(),e.getY());
             Point p1,p2;
             p1=((SRect)(objects.elementAt(i))).firstSelPoint();
             p2=((SRect)(objects.elementAt(i))).secondSelPoint();
             g.setColor(Color.black);
             g.fillRect(p1.x-3,p1.y-3,6,6);
             g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
             g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
             g.setColor(((SRect)(objects.elementAt(i))).selColor());
             g.drawRect(p1.x,p1.y,p2.x,p2.y);
             p2.x=initPoint.x-p1.x;
             p2.y=p2.y+(p1.y-initPoint.y);
             g.drawRect(p1.x,initPoint.y,p2.x,p2.y);
             g.setColor(Color.black);
             g.fillRect(p1.x-3,initPoint.y-3,6,6);
             g.fillRect(p1.x+p2.x-3,initPoint.y-3,6,6);
             g.fillRect(p1.x+p2.x-3,initPoint.y+(p2.y)-3,6,6);
             ((SRect)(objects.elementAt(i))).setFirstPoint(p1.x,initPoint.y);
             ((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
             previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SRect)(objects.elementAt(i))).getPickedHandle() == 6){
             initPoint=new Point(e.getX(),e.getY());
             Point p1,p2;
             p1=((SRect)(objects.elementAt(i))).firstSelPoint();
             p2=((SRect)(objects.elementAt(i))).secondSelPoint();
             g.setColor(Color.black);
             g.fillRect(p1.x-3,p1.y-3,6,6);
             g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
             g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
             g.setColor(((SRect)(objects.elementAt(i))).selColor());
             g.drawRect(p1.x,p1.y,p2.x,p2.y);
             p2.x+=p1.x-initPoint.x;
             p2.y=(initPoint.y-p1.y);
             g.drawRect(initPoint.x,initPoint.y-p2.y,p2.x,p2.y);
             g.setColor(Color.black);
             g.fillRect(initPoint.x-3,p1.y-3,6,6);
             g.fillRect(initPoint.x-3,p1.y+p2.y-3,6,6);
             g.fillRect(initPoint.x+p2.x-3,p1.y+(p2.y)-3,6,6);
             ((SRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y-p2.y);
             ((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
             previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SRect)(objects.elementAt(i))).getPickedHandle() == 8){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SRect)(objects.elementAt(i))).firstSelPoint();
              p2=((SRect)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
              g.setColor(((SRect)(objects.elementAt(i))).selColor());
              g.drawRect(p1.x,p1.y,p2.x,p2.y);
              p2.x=initPoint.x-p1.x;
              p2.y=initPoint.y-p1.y;
              g.drawRect(p1.x,p1.y,p2.x,p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
              g.fillRect(p1.x-3,initPoint.y-3,6,6);
              g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
              ((SRect)(objects.elementAt(i))).setFirstPoint(p1.x,p1.y);
              ((SRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
          }
        }
        else if((objects.elementAt(i).toString()).regionMatches(0,"SFRect",0,6)){
          if(((SFRect)(objects.elementAt(i))).getIfObjectClicked()){
            initPoint=new Point(e.getX(),e.getY());
            Point p1,p2;
            p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
            p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
            int disX, disY;
            disX=initPoint.x-previous.x;
            disY=initPoint.y-previous.y;
            g.setColor(((SFRect)(objects.elementAt(i))).selColor());
            g.fillRect(p1.x,p1.y,p2.x,p2.y);
            g.setColor(Color.black);
            g.fillRect(p1.x-3,p1.y-3,6,6);
            g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
            g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
            g.fillRect(p1.x+(p2.x)-3,p1.y+(p2.y)-3,6,6);
            //
            g.setColor(((SFRect)(objects.elementAt(i))).selColor());
            g.fillRect(p1.x+disX, p1.y+disY,p2.x,p2.y);
            g.setColor(Color.black);
            g.fillRect(p1.x-3+disX,p1.y-3+disY,6,6);
            g.fillRect(p1.x-3+disX,p1.y+(p2.y)-3+disY,6,6);
            g.fillRect(p1.x+(p2.x)-3+disX,p1.y-3+disY,6,6);
            g.fillRect(p1.x+(p2.x)-3+disX,p1.y+(p2.y)-3+disY,6,6);
            ((SFRect)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY); 
            previous=new Point(initPoint.x,initPoint.y);
          }
          else if (((SFRect)(objects.elementAt(i))).getIfHandleClicked()){
            if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 1){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
              p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y-3,6,6);
              g.fillRect(p1.x+(p2.x)-3,p1.y-3,6,6);
              g.fillRect(p1.x-3,p1.y+(p2.y)-3,6,6);
              g.setColor(((SFRect)(objects.elementAt(i))).selColor());
              g.fillRect(p1.x,p1.y,p2.x,p2.y);
              p2.x+=p1.x-initPoint.x;
              p2.y+=p1.y-initPoint.y;
              g.fillRect(initPoint.x,initPoint.y,p2.x,p2.y);
              g.setColor(Color.black);
              g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
              g.fillRect(initPoint.x+(p2.x)-3,initPoint.y-3,6,6);
              g.fillRect(initPoint.x-3,initPoint.y+(p2.y)-3,6,6);
              ((SFRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y);
              ((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 3){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
              p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y-3,6,6);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
              g.setColor(((SFRect)(objects.elementAt(i))).selColor());
              g.fillRect(p1.x,p1.y,p2.x,p2.y);
              p2.x=initPoint.x-p1.x;
              p2.y=p2.y+(p1.y-initPoint.y);
              g.fillRect(p1.x,initPoint.y,p2.x,p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3,initPoint.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,initPoint.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,initPoint.y+(p2.y)-3,6,6);
              ((SFRect)(objects.elementAt(i))).setFirstPoint(p1.x,initPoint.y);
              ((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 6){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
              p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y-3,6,6);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
              g.setColor(((SFRect)(objects.elementAt(i))).selColor());
              g.fillRect(p1.x,p1.y,p2.x,p2.y);
              p2.x+=p1.x-initPoint.x;
              p2.y=(initPoint.y-p1.y);
              g.fillRect(initPoint.x,initPoint.y-p2.y,p2.x,p2.y);
              g.setColor(Color.black);
              g.fillRect(initPoint.x-3,p1.y-3,6,6);
              g.fillRect(initPoint.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(initPoint.x+p2.x-3,p1.y+(p2.y)-3,6,6);
              ((SFRect)(objects.elementAt(i))).setFirstPoint(initPoint.x,initPoint.y-p2.y);
              ((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SFRect)(objects.elementAt(i))).getPickedHandle() == 8){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFRect)(objects.elementAt(i))).firstSelPoint();
              p2=((SFRect)(objects.elementAt(i))).secondSelPoint();
              g.setColor(Color.black);
              g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(p2.y)-3,6,6);
              g.setColor(((SFRect)(objects.elementAt(i))).selColor());
              g.fillRect(p1.x,p1.y,p2.x,p2.y);
              p2.x=initPoint.x-p1.x;
              p2.y=initPoint.y-p1.y;
              g.fillRect(p1.x,p1.y,p2.x,p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
              g.fillRect(p1.x-3,initPoint.y-3,6,6);
              g.fillRect(initPoint.x-3,initPoint.y-3,6,6);
              ((SFRect)(objects.elementAt(i))).setFirstPoint(p1.x,p1.y);
              ((SFRect)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
          }
        }
        else if((objects.elementAt(i).toString()).regionMatches(0,"SOval",0,5)){
          if(((SOval)(objects.elementAt(i))).getIfObjectClicked()){
            initPoint=new Point(e.getX(),e.getY());
            Point p1,p2;
            p1=((SOval)(objects.elementAt(i))).firstSelPoint();
            p2=((SOval)(objects.elementAt(i))).secondSelPoint();
            int disX, disY;
            disX=initPoint.x-previous.x;
            disY=initPoint.y-previous.y;
            g.setColor(((SOval)(objects.elementAt(i))).selColor());
            g.drawOval(p1.x-p2.x,p1.y-p2.y,p2.x*2,p2.y*2);
            g.setColor(Color.black);
            g.fillRect(p1.x-p2.x-3,p1.y-3,6,6);
            g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
            g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
            g.fillRect(p1.x-3,p1.y-p2.y-3,6,6);
            //
            g.setColor(((SOval)(objects.elementAt(i))).selColor());
            g.drawOval(p1.x+disX-p2.x, p1.y+disY-p2.y,p2.x*2,p2.y*2);
            g.setColor(Color.black);
            g.fillRect(p1.x-p2.x-3+disX,p1.y-3+disY,6,6);
            g.fillRect(p1.x+p2.x-3+disX,p1.y-3+disY,6,6);
            g.fillRect(p1.x-3+disX,p1.y+p2.y-3+disY,6,6);
            g.fillRect(p1.x-3+disX,p1.y-p2.y-3+disY,6,6);
            ((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY); 
            previous=new Point(initPoint.x,initPoint.y);
          }
          else if (((SOval)(objects.elementAt(i))).getIfHandleClicked()){
            if(((SOval)(objects.elementAt(i))).getPickedHandle() == 1){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              g.setColor(((SOval)(objects.elementAt(i))).selColor());
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              p2.x=p1.x+p2.x-initPoint.x;
              p1.x=initPoint.x;// p1.x+(initPoint.x-previous.x)
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              ((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SOval)(objects.elementAt(i))).getPickedHandle() == 2){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              g.setColor(((SOval)(objects.elementAt(i))).selColor());
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              p1.x=p1.x+p2.x;
              p2.x=initPoint.x-(p1.x+p2.x)+p2.x;
              p1.x=p1.x-p2.x;
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              ((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SOval)(objects.elementAt(i))).getPickedHandle() == 3){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
              g.setColor(((SOval)(objects.elementAt(i))).selColor());
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              int ty=p1.y+p2.y;
              p1.y=initPoint.y;
              p2.y=ty-p1.y;
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
              ((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SOval)(objects.elementAt(i))).getPickedHandle() == 4){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
              g.setColor(((SOval)(objects.elementAt(i))).selColor());
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              p1.y=p1.y+p2.y;
              p2.y=initPoint.y-(p1.y+p2.y)+p2.y;
              p1.y=p1.y-p2.y;
              g.drawOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
              ((SOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
          }
        }
        else if((objects.elementAt(i).toString()).regionMatches(0,"SFOval",0,6)){
          if(((SFOval)(objects.elementAt(i))).getIfObjectClicked()){
            initPoint=new Point(e.getX(),e.getY());
            Point p1,p2;
            p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
            p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
            int disX, disY;
            disX=initPoint.x-previous.x;
            disY=initPoint.y-previous.y;
            g.setColor(((SFOval)(objects.elementAt(i))).selColor());
            g.fillOval(p1.x-p2.x,p1.y-p2.y,p2.x*2,p2.y*2);
            g.setColor(Color.black);
            g.fillRect(p1.x-p2.x-3,p1.y-3,6,6);
            g.fillRect(p1.x+p2.x-3,p1.y-3,6,6);
            g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
            g.fillRect(p1.x-3,p1.y-p2.y-3,6,6);
            //
            g.setColor(((SFOval)(objects.elementAt(i))).selColor());
            g.fillOval(p1.x+disX-p2.x, p1.y+disY-p2.y,p2.x*2,p2.y*2);
            g.setColor(Color.black);
            g.fillRect(p1.x-p2.x-3+disX,p1.y-3+disY,6,6);
            g.fillRect(p1.x+p2.x-3+disX,p1.y-3+disY,6,6);
            g.fillRect(p1.x-3+disX,p1.y+p2.y-3+disY,6,6);
            g.fillRect(p1.x-3+disX,p1.y-p2.y-3+disY,6,6);
            ((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+disX,p1.y+disY); 
            previous=new Point(initPoint.x,initPoint.y);
          }
          else if(((SFOval)(objects.elementAt(i))).getIfHandleClicked()){
            if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 1){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              g.setColor(((SFOval)(objects.elementAt(i))).selColor());
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              p2.x=p1.x+p2.x-initPoint.x;
              p1.x=initPoint.x;// p1.x+(initPoint.x-previous.x)
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              ((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 2){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              g.setColor(((SFOval)(objects.elementAt(i))).selColor());
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              p1.x=p1.x+p2.x;
              p2.x=initPoint.x-(p1.x+p2.x)+p2.x;
              p1.x=p1.x-p2.x;
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3,p1.y+p2.y-3,6,6);
              g.fillRect(p1.x+(2*p2.x)-3,p1.y+p2.y-3,6,6);
              ((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 3){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
              g.setColor(((SFOval)(objects.elementAt(i))).selColor());
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              int ty=p1.y+p2.y;
              p1.y=initPoint.y;
              p2.y=ty-p1.y;
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
              ((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
            if(((SFOval)(objects.elementAt(i))).getPickedHandle() == 4){
              initPoint=new Point(e.getX(),e.getY());
              Point p1,p2;
              p1=((SFOval)(objects.elementAt(i))).firstSelPoint();
              p2=((SFOval)(objects.elementAt(i))).secondSelPoint();
              p1.x=p1.x-p2.x;
              p1.y=p1.y-p2.y;
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x-3+p2.x,p1.y+(2*p2.y)-3,6,6);
              g.setColor(((SFOval)(objects.elementAt(i))).selColor());
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              p1.y=p1.y+p2.y;
              p2.y=initPoint.y-(p1.y+p2.y)+p2.y;
              p1.y=p1.y-p2.y;
              g.fillOval(p1.x,p1.y,2*p2.x,2*p2.y);
              g.setColor(Color.black);
              g.fillRect(p1.x-3+p2.x,p1.y-3,6,6);
              g.fillRect(p1.x+p2.x-3,p1.y+(2*p2.y)-3,6,6);
              ((SFOval)(objects.elementAt(i))).setFirstPoint(p1.x+p2.x,p1.y+p2.y);
              ((SFOval)(objects.elementAt(i))).setSecondPoint(p2.x,p2.y);
              previous=new Point(initPoint.x,initPoint.y);
            }
          }
        }         
      }
    }
  }
  //Draw a border around the drawing area and repaint all objects in the 
  //vector.
  public void paint(Graphics g){
    int width = getSize().width;
    int height = getSize().height;
    g.drawRect(0,0,width-1,height-1);
    for(Enumeration e=objects.elements(); e.hasMoreElements();){
      ((DrawObject)e.nextElement()).paint(g);
    }
  }
}