TAREA_AreaGrafica.java



// AREA DE TRABAJO
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.StringTokenizer;
import java.awt.event.MouseEvent;


public class AreaGrafica extends JPanel implements MouseListener, MouseMotionListener
{
  private int DimVX = 0, DimVY = 0;   // Dimensiones de la clase.
  Object VElemento[] = new Object[100];  // Vector de elementos insertados.
  int VTipo[] = new int[100];  // Vector con el tipo de componente de cada elemento insertado.
  //  Valor   Tipo
  //    1     Resistencia
  //    2     Bobina
  //    3     Capacitor
  //    4     Fuente

  int XEi = 0, YEi = 0, DimEX = 0, DimEY = 0;

  Toolkit toolkit = Toolkit.getDefaultToolkit();
pg");


  Interfaz FRAME = null;
  public AreaGrafica(int DimVX, int DimVY, Interfaz F)
  {
    try
    {
      this.DimVX = DimVX;
      this.DimVY = DimVY;
      FRAME = F;
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

  private void jbInit() throws Exception
  {
    this.setLayout(null);
    addMouseListener(this);
    addMouseMotionListener(this);

  }

  public void paint(Graphics R)
  {

    int x=0, y=0;
    String ST="";
    R.clearRect(0, 0, DimVX, DimVY);
    R.setColor(Color.white);
    R.fill3DRect(0, 0, DimVX, DimVY, true);

    for (int k = 0; k < NComponente; k++)
    {
        switch (VTipo[k])
        {
            case 1:   // Resistencia
                  ((CRESIS)VElemento[k]).Dibuja(R, this);
                  break;
            case 2:   // Bobina
                  ((CBOBINA)VElemento[k]).Dibuja(R, this);
                  break;
            case 3:   // Capacitor
                  ((CCAPACITOR)VElemento[k]).Dibuja(R, this);
                  break;
            case 4:   // Fuente
                  ((CFUENTE)VElemento[k]).Dibuja(R, this);
                  break;
        }
    }
  }

  //____________________________________________________________________________
>
  //----------------------------------------------------------------------------
  void Inserta(String Elemento)
  {
      if (Elemento.equals("Resistencia"))
      {
          VElemento[NComponente] = (Object)(new CRESIS(1, 1));
          VTipo[NComponente] = 1;
          NComponente++;
      }
      if (Elemento.equals("Bobina"))
      {
          VElemento[NComponente] = (Object)(new CBOBINA(1, 1));
          VTipo[NComponente] = 2;
          NComponente++;
      }
      if (Elemento.equals("Capacitor"))
      {
          VElemento[NComponente] = (Object)(new CCAPACITOR(1, 1));
          VTipo[NComponente] = 3;
          NComponente++;
      }
      if (Elemento.equals("Fuente"))
      {
          VElemento[NComponente] = (Object)(new CFUENTE(1, 1));
          VTipo[NComponente] = 4;
          NComponente++;
      }
      if (Elemento.equals("Linea")) { TrazoDeLinea = true; }
      repaint();
  }

  int CualComponente(int XR, int YR)
  {
      for (int k = 0; k < NComponente; k++)
      {
          switch (VTipo[k])
          {
              // Resistencia
              case 1: XEi = ((CRESIS)VElemento[k]).PosX;
                      YEi = ((CRESIS)VElemento[k]).PosY;
                      DimEX = ((CRESIS)VElemento[k]).DimX;
                      DimEY = ((CRESIS)VElemento[k]).DimY;
                      break;
              // Bobina
              case 2:  XEi = ((CBOBINA)VElemento[k]).PosX;
                      YEi = ((CBOBINA)VElemento[k]).PosY;
                      DimEX = ((CBOBINA)VElemento[k]).DimX;
                      DimEY = ((CBOBINA)VElemento[k]).DimY;
                      break;
              // Capacitor
              case 3: XEi = ((CCAPACITOR)VElemento[k]).PosX;
                      YEi = ((CCAPACITOR)VElemento[k]).PosY;
                      DimEX = ((CCAPACITOR)VElemento[k]).DimX;
                      DimEY = ((CCAPACITOR)VElemento[k]).DimY;
                      break;
              // Fuente
              case 4: XEi = ((CFUENTE)VElemento[k]).PosX;
                      YEi = ((CFUENTE)VElemento[k]).PosY;
                      DimEX = ((CFUENTE)VElemento[k]).DimX;
                      DimEY = ((CFUENTE)VElemento[k]).DimY;
                      break;
          }
          if (XR >= XEi && XR <= XEi + DimEX && YR >= YEi && YR <= YEi + DimEY) return k;
      }
lemento
      return 110;
  }

  void Mueve(int Elem, int XR, int YR)
      if ( XR + DimEX < DimVX && XEi > 0 && YR + DimEY < DimVY && YEi > 0 )
      {
          switch (VTipo[Elem])
          {
              // Resistencia
              case 1: ((CRESIS)VElemento[Elem]).Posicion(XR, YR, FRAME); break;
              // Bobina
              case 2: ((CBOBINA)VElemento[Elem]).Posicion(XR, YR, FRAME); break;
              // Capacitor
              case 3: ((CCAPACITOR)VElemento[Elem]).Posicion(XR, YR, FRAME); break;
              // Fuente
              case 4: ((CFUENTE)VElemento[Elem]).Posicion(XR, YR, FRAME); break;
          }
          repaint();
      }
  }

  void Gira(int Elem)
  {
    {
      switch (VTipo[Elem])
      {
          // Resistencia
          case 1: ((CRESIS)VElemento[Elem]).Rota(); break;
          // Bobina
          case 2: ((CBOBINA)VElemento[Elem]).Rota(); break;
          // Capacitor
          case 3: ((CCAPACITOR)VElemento[Elem]).Rota(); break;
          // Fuente
          case 4: ((CFUENTE)VElemento[Elem]).Rota(); break;
      }
    }
      int XEi = 0, YEi = 0, DimEX = 0, DimEY = 0;
      repaint();
  }

  //____________________________________________________________________________
>
  //----------------------------------------------------------------------------
  public void mouseClicked(MouseEvent e) { CIR(e); }
  public void mousePressed(MouseEvent e) {}
  public void mouseReleased(MouseEvent e) { STIR(e); }
  public void mouseEntered(MouseEvent e) {}
  public void mouseExited(MouseEvent e) {}
  public void mouseDragged(MouseEvent e)  { ARTI(e); }
  public void mouseDown(MouseEvent e) {}
  public void mouseMoved(MouseEvent e) {  MR(e); }

  void MR(MouseEvent e) { FRAME.Coords.setText("" + e.getX() + "," + e.getY()); }

  void CIR(MouseEvent e)
  {
      // Obtengo el identificador de la tecla pulsada como cadena
      StringTokenizer ST = new StringTokenizer(e.paramString(),"=");
      ST.nextToken();
      ST = new StringTokenizer(ST.nextToken(),",");

      ElemSelec = CualComponente(e.getX(), e.getY());

      // EL CLICK FUE EN UN RANGO VALIDO PARA INICIAR EL TRAZADO DE LA LINEA?
      // SI FUE ASI, EL SEGUNDO CLICK DEBE SER TAMBIEN EN OTRO RANGO VALIDO
      // DE UN PUNTO DE CONECCION.
      // DE OTRA MANERA, AL DAR EL PRIMER CLICK FALLIDO TrazoDeLinea = false
      // O AL DAR EL SEGUNDO CLICK FALLIDO, SE BORRA LA LINEA Y TrazoDeLinea = true.
      switch (Integer.parseInt(ST.nextToken()))
      {
          case 16:// Tecla izquierda
                FRAME.Coords.setText("Tecla izquerda");
                break;
          case 8:// Tecla central
                FRAME.Coords.setText("Tecla media");
                break;
          case 4:// Tecla derecha
                FRAME.Coords.setText("Tecla derecha");
                Gira(ElemSelec);
                break;
      }
  }

  void STIR(MouseEvent e) { ProcesoDeArrastre = false; }

  void TIRA(MouseEvent e) {}


  void ARTI(MouseEvent e)
  {
      if (!ProcesoDeArrastre)
      {
          ProcesoDeArrastre = true;
          ElemSelec = CualComponente(e.getX(), e.getY());
      }
      if (e.getX() < DimVX-1 && e.getX() > 1 && e.getY() < DimVY-1 && e.getY() > 1 && ElemSelec < 100)
      {
          Mueve(ElemSelec, e.getX(), e.getY());
      }
  }
}

/*  RASTREO DE COORDENADAS
    int x = ((CRESIS)VElemento[0]).PosX;
    int y = ((CRESIS)VElemento[0]).PosY;
    FRAME.Coords.setText("NUEVO= " + x + ", " + y);

*/

/*  EN EL PAINT
    R.drawImage(C_00, 10, 10, this);
    R.setColor(Color.black);
    R.drawString("Dim= " + C_00.getWidth(this) + ", " + C_00.getHeight(this), 150, 150);
    R.drawLine(10+8, 10, 50, 50);
    R.drawLine(10+8, 10+67, 50, 50);
*/