// 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);
*/