Hoy vamos a empezar a captar los eventos de ratón y a utilizarlos para crear un programa simple de dibujo. Básicamente añadiremos unos listeners a un JFrame para lograr captar los eventos de ratón y así identificar los puntos por los que desplazamos el puntero.
Estos MouseAdapter y MouseMotionAdapter implementan las interfaces MouseListener y MouseMotionListener respectivamente, que se encargan de detectar eventos de ratón, como clicks, entradas y salidas del puntero en determinadas zonas, desplazamientos y arrastres de ratón.
En el ejemplo de hoy utilizaremos estos eventos para dibujar puntos sobre un lienzo, os dejo el código a continuación. Y ya sabéis, cualquier duda dejar un comentario y os responderé con la mayor brevedad posible.
import java.awt.BorderLayout; import java.awt.Graphics; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JFrame; import javax.swing.JLabel; public class Painter extends JFrame { private int cuentaPuntos = 0; private JLabel j = new JLabel(); // arreglo de referencias a java.awt.Point private int maxPoints = 1500; private Point puntos[] = new Point[maxPoints]; // configurar GUI y registrar manejador de eventos de ratón public Painter() { super("Un programa simple de dibujo"); // crear una etiqueta y colocarla en la parte SOUTH del esquema // BorderLayout getContentPane().add(new JLabel("Arrastre el ratón para dibujar"), BorderLayout.SOUTH); getContentPane().add(j, BorderLayout.NORTH); // Ahora añadimos listeners propios para los eventos de ratón addMouseMotionListener( new MouseMotionAdapter() { // clase interna anónima // almacenar coordenadas de arrastre de ratón y llamar a repaint @Override public void mouseDragged(MouseEvent evento) { if (cuentaPuntos < puntos.length) { puntos[cuentaPuntos] = evento.getPoint(); ++cuentaPuntos; repaint(); j.setText("Van: " + cuentaPuntos + " puntos, le quedan: " + (maxPoints - cuentaPuntos) + " puntos"); } } } // fin de la clase interna anónima ); // fin de la llamada a addMouseMotionListener addMouseListener( new MouseAdapter() { // clase interna anónima // almacenar coordenadas de click de ratón @Override public void mouseClicked(MouseEvent evento) { if (cuentaPuntos < puntos.length) { puntos[cuentaPuntos] = evento.getPoint(); ++cuentaPuntos; repaint(); j.setText("Van: " + cuentaPuntos + " puntos, le quedan: " + (maxPoints - cuentaPuntos) + " puntos"); } } } // fin de la clase interna anónima ); // fin de la llamada a addMouseListener setSize(400, 200); setVisible(true); } // fin del constructor de Pintor // dibujar óvalo en un cuadro delimitador de 2 por 2 en ubicación // especificada en ventana @Override public void paint(Graphics g) { super.paint(g); // borra el área de dibujo for (int i = 0; i < puntos.length && puntos[i] != null; i++) g.fillOval(puntos[i].x, puntos[i].y, 2, 2); } public static void main(String args[]) { Painter aplicacion = new Painter(); aplicacion.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Espero que os sea útil :)
1 comentarios:
Muy bueno, ¿tendrás algo como una vista previa de impresión?. Ejemplo: Capturo unas cuántas cosas en unos campos de texto, otras tantas en una tabla, y las muestro acomodadas en una ventana tal como van a quedar al imprimirlas (del campo de texto solo los datos o un línea abajo y la tabla sí completa), considerando claro el tamaño de la hoja, saludos.
Publicar un comentario