Foros del Web » Programación para mayores de 30 ;) » Java »

URGENTE : Mouse dragged

Estas en el tema de URGENTE : Mouse dragged en el foro de Java en Foros del Web. Alguien sabe como se hace para que cuando estoy dibujando un circulo a mano alzada(que eso me lo hace perfectamente) pongamos en mi caso que ...
  #1 (permalink)  
Antiguo 06/02/2008, 07:20
 
Fecha de Ingreso: enero-2008
Mensajes: 48
Antigüedad: 16 años, 3 meses
Puntos: 3
URGENTE : Mouse dragged

Alguien sabe como se hace para que cuando estoy dibujando un circulo a mano alzada(que eso me lo hace perfectamente) pongamos en mi caso que lo hago en mousedragged si dejo de clickear el mouse automaticamente se cierre el punto inicial con el final(el ultimo punto que se ha dibujado) no se si me entendeis

Cualquier aportación os lo agradeceré
  #2 (permalink)  
Antiguo 06/02/2008, 08:18
 
Fecha de Ingreso: enero-2008
Mensajes: 162
Antigüedad: 16 años, 3 meses
Puntos: 2
Re: URGENTE : Mouse dragged

Suponiendo que estás trabajando con un Canvas o alguna clase hija no es complicado. Cuando salta el evento del click del mouse guardá el punto en el que sucedió y hacé lo mismo con el punto donde soltás el botón. Ya tenés los 2 puntos, ahora dibuja una recta entre los 2 y listo.
Eso es útil si la linea de "cerradura" no va a pasar por encima de tu dibujo, en el caso de que pase eso, vas a tener que jugar con intersecciones y curvas, pero tampoco es tan complicado...
  #3 (permalink)  
Antiguo 06/02/2008, 08:52
 
Fecha de Ingreso: enero-2008
Mensajes: 48
Antigüedad: 16 años, 3 meses
Puntos: 3
Re: URGENTE : Mouse dragged

gracias por tu respuesta.No utilizo nada de canvas,y mis lineas son puntos compuestos por pixeles mas gruesos...entonces lo veo dificil.Los puntos son un arraylist <Punto>

//METODO MODELO AÑADIR PUNTOS

public void añadirPuntos(Punto p)
{
ListaPuntos.add(p);
this.setChanged();
this.notifyObservers(p);
}

Te pongo el código:
//DONDE PINTO

this.addMouseMotionListener(new MouseMotionListener()
{
@Override
public void mouseDragged(java.awt.event.MouseEvent e)
{
switch(Pizarra.option)
{
case 3://DIBUJAR PUNTOS DE LA LINEA

modelo.añadirPuntos(new Punto(e.getX(),e.getY(),colorNormal));
break;
}
}

//Si cAMBIA UN PUNTO DIBUJAMOS SOLO ESE

/****************************METODO PAINt***********************************/
public void paint(Graphics g)
{

System.out.println("Estamos en el paint.Principo");
Graphics realGraphics = g; // nos guardamos la referencia a g, puesto que a lo mejor la machacamos despues

if (this.getIcon()!=null && doubleBuffer == null){
doubleBuffer = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB);
}
if (modelo==null && this.getIcon()!=null){
g = doubleBuffer.getGraphics();
super.paint(g);
}
if (modelo!=null && (doubleBuffer == null || hasChanged))
{
if (doubleBuffer == null)
{
doubleBuffer = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_RGB);
}

g = doubleBuffer.getGraphics();

Graphics2D g2 = (Graphics2D) g;//hace un cast para pasarlo a este tipo

if (whatChanged != null)//este if es basicamente para dibujar los puntos a mano alzada
{
// ha cambiado una cosa concreta, no hace falta pintar todo
if (whatChanged instanceof Punto)
{

// se añadio un punto, solo pintamos entonces ese punto
Punto pu = (Punto) whatChanged;

if(pu.getSeleccionado()==true)
{
System.out.println("Estamos en el paint en whatChanged");

g2.setColor(pu.getColor());
g2.setColor(colorSelec);
g2.fillRect(pu.getX(),pu.getY(),11,11);

}
else
{
System.out.println("Estamos en el paint en whatChanged y entramos else de seleccionado");
g2.setColor(getColorNormal());
}
g2.fillOval(pu.getX(), pu.getY(), 5, 5);
}

}
  #4 (permalink)  
Antiguo 06/02/2008, 09:07
 
Fecha de Ingreso: enero-2008
Mensajes: 162
Antigüedad: 16 años, 3 meses
Puntos: 2
Re: URGENTE : Mouse dragged

Creo que la única solución es lo que te dije arriba. Aguardar los extremos de la figura como puntos y dibujar una recta entre ambos. Definite un método que dibuje la recta recibiendo los 2 puntos....
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:16.