Ver Mensaje Individual
  #8 (permalink)  
Antiguo 05/02/2014, 15:24
Avatar de floppy-dj
floppy-dj
 
Fecha de Ingreso: diciembre-2006
Ubicación: Huelva
Mensajes: 25
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Arrastrar jLabel

por si a alguien le hace falta todavía yo siempre lo hago de la siguiente forma:

Declaro 2 puntos, el primero para calcular las coordenadas del puntero el segundo para las coordenadas del jlabel y dos variables enteras donde guardo la diferencia de coordenadas entre el puntero y el principio del label, esto lo hago para que cuando pulses y arrastres el label no de un salto hacia el cursor, y por ultimo la variable booleana es para que ésta diferencia solo la calcule la primera vez, sino no se movería.

Código:
//declaracion de variables
    private Point p;
    private Point pl;
    private int lx,ly;
    boolean calcular_diferencia=true;
Una vez creada la etiqueta uso MouseDragged y MousePressed:

Código:
 private void etiquetaMouseDragged(java.awt.event.MouseEvent evt) {                                     
        //calculo la posición del ratón y lo guardo en el p
        p = MouseInfo.getPointerInfo().getLocation();
        
        //este if solo se ejecuta al principio de que empiece a mover la etiqueta
        if(calcular_diferencia){
            //calculo la posición de la etiqueta
            pl = etiqueta.getLocation();
            //guardo la diferencia entre la posición del ratón y de la etiqueta
            lx=p.x-pl.x;
            ly=p.y-pl.y;
        }
        //ponemos false el calculo para que no lo vuelva a calcular otra vez
        calcular_diferencia=false;
        
        //cambio la posición de la etiqueta a la posición del ratón menos la diferencia calculada
        etiqueta.setLocation(p.x-lx, p.y-ly);
    }

cuando sueltes la etiqueta, si vuelves a moverla, la diferencia del ratón con respecto de la etiqueta probablemente haya cambiado, por eso ponemos otra vez true la variable booleana justo al soltar el boton del raton
Código:
private void etiquetaMousePressed(java.awt.event.MouseEvent evt) {                                     
        
        calcular_diferencia=true;

}