/*
* Fichero: ArrastrarGrafico.java
* Autor: Chuidiang
* Fecha: 6/06/07 21:40
*/
package chuidiang.ejemplos.arrastrar_grafico;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
/**
* Ejemplo de gráfico que se puede arrastrar con el ratón.
*
* @author Chuidiang
*
*/
public class ArrastrarGrafico extends Canvas implements MouseMotionListener
{
/**
* serial uid
*/
private static final long serialVersionUID = -4273648398171436938L;
/**
* Posicion x del vértice superior izquierdo del rectángulo.
*/
private int xRectangulo = 0;
/**
* Posicion y del vértice superior izquierdo del rectángulo
*/
private int yRectangulo = 0;
/**
* Ancho del rectángulo
*/
private int anchoRectangulo = 100;
/**
* Alto del rectángulo
*/
private int altoRectangulo = 100;
/**
* Si actualmente se está arrastrando o no el rectángulo.
*/
private boolean arrastrando = false;
/**
* x en la que estaba anteriormente el ratón.
*/
private int xAnteriorRaton;
/**
* y en la que estaba anteriormente el ratón
*/
private int yAnteriorRaton;
/**
* Crea un nuevo objeto ArrastrarGrafico.
*/
public ArrastrarGrafico()
{
addMouseMotionListener(this);
}
/**
* Para darle un tamaño por defecto al Canvas de dibujo
*
* @return Dimension por defecto.
*/
@Override
public Dimension getPreferredSize()
{
return new Dimension(500, 500);
}
/**
* Dibuja el rectángulo en la posición indicada por por xRectangulo e
* yRectangulo.
*
* @param g Graphics con el que dibujar.
*/
@Override
public void paint(Graphics g)
{
g.setColor(Color.RED);
g.fillRect(xRectangulo, yRectangulo, anchoRectangulo, altoRectangulo);
}
/**
* Crea la ventana con el Canvas y lo visualiza
*
* @param args Se ignoran
*/
public static void main(String[] args)
{
JFrame v = new JFrame("Arrastrar Grafico");
ArrastrarGrafico c = new ArrastrarGrafico();
v.getContentPane().add(c);
v.pack();
v.setVisible(true);
v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
/**
* Método al que se llama cuando se arrastra el ratón.
* Se comprueba con el atributo arrastrando si está empezando el arrastre o
* ya se esta en medio del mismo.
* Si se comienza el arrastre, se guardan las coordenadas del ratón que
* vienen en el evento MouseEvent y se cambia el valor del atributo arrastrando.
* Si se está en medio de un arrastre, se calcula la nueva posición del
* rectángulo y se llama al método repaint() para que se pinte.
*
* @param e Evento del ratón
*/
public void mouseDragged(MouseEvent e)
{
// Si comienza el arrastre ...
if (!arrastrando)
{
// ... y el ratón está dentro del rectángulo
if (estaDentro(e))
{
// Se guardan las posiciones del ratón
xAnteriorRaton = e.getX();
yAnteriorRaton = e.getY();
// y se marca que ha comenzado el arrastre.
arrastrando = true;
}
}
else
{
// Si ya había empezado el arrastre, se calculan las nuevas
// coordenadas del rectángulo
xRectangulo = (xRectangulo + e.getX()) - xAnteriorRaton;
yRectangulo = (yRectangulo + e.getY()) - yAnteriorRaton;
// Se guarda la posición del ratón para el siguiente cálculo
xAnteriorRaton = e.getX();
yAnteriorRaton = e.getY();
// y se manda repintar el Canvas
repaint();
}
}
/**
* Para ver si el ratón está dentro del rectángulo.
* Si está dentro, puede comenzar el arrastre.
*
* @param e El evento de ratón
*
* @return true si el ratón está dentro del rectángulo
*/
private boolean estaDentro(MouseEvent e)
{
if (
(e.getX() > xRectangulo) &&
(e.getX() < (xRectangulo + anchoRectangulo)) &&
(e.getY() > yRectangulo) &&
(e.getY() < (yRectangulo + altoRectangulo)))
{
return true;
}
return false;
}
/**
* El ratón se mueve sin arrastrar. Se marca fin de arrastre.
*
* @param e E
*/
public void mouseMoved(MouseEvent e)
{
arrastrando = false;
}
}
|