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;
}