Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > MouseEvent en area circular

Hola a todos.

Mi pregunta es ¿Como puedo hacer para que java me detecte un área circular para cuando tenga el ratón encima me cree un evento?

Gracias.

noviembre 18, 2014 | Unregistered CommenterErnesto

Calculas la distancia entre la posición del ratón y el centro del círculo, y compruebas si es menor o mayor que el radio del mismo. Así sabes si el ratón está dentro o no.

noviembre 18, 2014 | Registered Commenterchoces

Gracias por la respuesta choces, pero me podrías orientar un poco... como lo hago eso?

noviembre 19, 2014 | Unregistered CommenterErnesto

Es un problema simple de trigonometría: se trata de calcular la hipotenusa de un triángulo rectángulo.

El punto del ratón tendrá unas coordenadas x1, y1 mientras que el centro del círculo x2, y2

Los catetos del triángulo serán las diferencias entre esas coordenadas, luego la distancia será la hipotenusa del mismo.

noviembre 19, 2014 | Registered Commenterchoces

Gracias choces, lo probaré

Un saludo

noviembre 19, 2014 | Unregistered CommenterErnesto

Usa el metodo contains de esta clase

public class Elipce extends Polygon {

private double X;
private double Y;
private double logintudEjeX;
private double longitudEjeY;
private int granulidad;

public Elipce(double X, double Y, double logintudEjeX, double longitudEjeY, int granulidad) {
super();
this.X = X;
this.Y = Y;
this.logintudEjeX = logintudEjeX;
this.longitudEjeY = longitudEjeY;
this.granulidad = granulidad;
calcularPuntos();
}

private void calcularPuntos(){
int[] xPoints = new int[granulidad];
int[] yPoints = new int[granulidad];

for (int i = 0; i < xPoints.length; i++) {
xPoints[i] = (int) getX(X, longitudEjeY, i * ((2 * Math.PI) / granulidad));
yPoints[i] = (int) getY(Y, longitudEjeY, i * ((2 * Math.PI) / granulidad));
}
}

private double getX(double xCentro, double semiEje, double angulo) {
return (xCentro + semiEje * Math.cos(angulo));
}

private double getY(double yCentro, double semiEje, double angulo) {
return (yCentro + semiEje * Math.sin(angulo));
}

public boolean intersect(Polygon elipce1, Polygon elipce2) {
for (int i = 0; i < elipce1.npoints; i++) {
if (elipce2.contains(elipce1.xpoints[i], elipce1.ypoints[i])) {
return true;
}
}
return false;
}
}

diciembre 3, 2014 | Registered Commenternelsonxx1

Ejemplo de uso

Elipce e=new Elipce(XCirculo, YCirculo, ancho, alto, numeroPuntosPoligono);
if(e.contains(xRaton,yRaton)){
//// Contiene
}else{
// No contiene
}

diciembre 3, 2014 | Registered Commenternelsonxx1