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