import java.awt.event.*; import java.awt.*; import javax.swing.*; /** * Clase HandlerTrasladarMostrar * Implementa los listeners necesarios para trasladar las formas * y mostrar sus datos. * Se Traslada al mantener presionado el mouse sobre un bloque. * Se muestran los datos al hacer click sobre una forma. * * @author Patricio A. Castillo Pizarro - Eric C. Maldonado Olguin * @version 2.0 - Jun 26th, 2007 */ class HandlerTrasladarMostrar implements ActionListener { private EditorPanel panel; private boolean active; private Forma forma; private Point previo; /** * Constructor. * @param p Panel en que se efectuan las operaciones. */ public HandlerTrasladarMostrar(EditorPanel p) { panel = p; active=false; } /** * Implementa los listeners necesarios para modificar la forma. * @param e Parametro que indica el estado del evento */ public void actionPerformed(ActionEvent e) { panel.changeMouseListener(new MouseHandler()); panel.changeMouseMotionListener(new MouseMotionHandler()); panel.manipulating(); active=false; } /** * Clase interna que contiene los metodos de MouseListener */ class MouseHandler extends MouseAdapter { /** * Metodo que define las acciones a realizar cuando se hace un * click con el mouse. * @param event Parametro que indica la accion realizada por el mouse */ public void mouseClicked(MouseEvent event) { Point punto = event.getPoint(); forma = (Forma)panel.findD(punto); if(forma != null) { JFrame frame2 = new JFrame("Configurar Parametros"); //frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Create and set up the content pane. Dialogo newContentPane = new Dialogo(frame2,forma); newContentPane.setOpaque(true); //content panes must be opaque frame2.setContentPane(newContentPane); //Display the window. frame2.pack(); frame2.setVisible(true); }else{ forma = (Forma)panel.find(punto); if(forma != null) { String datos = new String(forma.getProgram()); JOptionPane.showMessageDialog(null, datos, "Datos de la forma", JOptionPane.PLAIN_MESSAGE); } } } /** * Metodo que define las acciones a realizar cuando se presiona * el boton del mouse. * @param event Parametro que indica la accion realizada por el mouse */ public void mousePressed (MouseEvent event) { Point punto = event.getPoint(); forma = (Forma)panel.find(punto); if(forma != null) { forma.selected = true; active = true; int x = punto.x; int y = punto.y; //Se discretiza la posicion que puede adoptar el punto inicial //de traslacion para facilitar el manejo de la forma x = x / 10; y = y / 10; punto.setLocation (x*10, y*10); previo = punto; panel.repaint(); } } /** * Metodo que define las acciones a realizar cuando se suelta * el boton del mouse. * @param event Parametro que indica la accion realizada por el mouse */ public void MouseReleased (MouseEvent event) { forma.selected = false; active = false; panel.repaint(); } } /** * Clase interna que contiene los metodos de MouseMotionListener */ class MouseMotionHandler extends MouseMotionAdapter { /** * Metodo que define las acciones a realizar cuando se matiene * presionado el boton del mouse mientras se mueve. * @param event Parametro que indica la accion realizada por el mouse */ public void mouseDragged(MouseEvent event) { Point p; if(active) { p = event.getPoint(); int deltaX = p.x - previo.x; int deltaY = p.y - previo.y; //Se discretizan los movimientos del mouse para facilitar //el manejo de la forma if (Math.abs(deltaX)>49) { int x = deltaX / 50; forma.trasladar(x*50,0); previo.setLocation (previo.getX()+x*50, previo.getY()); panel.repaint(); } if (Math.abs(deltaY)>49) { int y = deltaY / 50; forma.trasladar(0, y*50); previo.setLocation (previo.getX(), previo.getY()+y*50); panel.repaint(); } } } /** * Metodo que define las acciones a realizar cuando se mueve el mouse. * Entrega la posicion del mouse a medida que se mueve en el circuito. * @param event Parametro que indica la accion realizada por el mouse */ public void mouseMoved(MouseEvent event) { Point p = event.getPoint(); forma = (Forma)panel.find(p); } } } //Fin clase HandlerTrasladarMostrar