Očigledno je da se ljudima ova tema učinila, ili trivijalnom, nisu znali da protumače pitanje, ili nisu znali odgovor; te nisu našli za shodno da učestvuju u temi.

Stoga sam sam malo eksperimentisao i - najzad - našao rešenje sam

Pošto mislim da ljudi često mogu naići na ovakve muke kada, poput mene, tek počinju koketiranje sa Javom; odlučio sam da objasnim ono što sam shvatio rešavajući ovaj problem.
Ako koristite MouseMotionListener/MouseMotionAdapter, sigurno ćete pokušati da implementirate ...void mouseDragged(MouseEvent e)... U ovom slučaju, neće biti dovoljno samo proslediti koordinate MouseEvent-a (e), jer, čini mi se, on prosleđuje čas-apsolutne, čas-relativne koordinate (abs: desktop, rel: prozor), te dobijamo efekat skakutanja komponente po ekranu. Potrebno je prvo, na početku akcije prevlačenja, prevesti koordinate eventa na koordinate komponente koju prenosimo, za šta se koristi metoda translatePoint(int x, int y) pomenutog eventa.
Sledeći primer implementacije MouseMotionAdapter klase ovo i ilustruje:
Code:
private class Prevlacenje extends MouseMotionAdapter {
public void mouseDragged(MouseEvent e){
int x,y;
Component c=e.getComponent();
x=c.getX();
y=c.getY();
e.translatePoint(x,y); // Sprečava efekat skakutanja
c.setLocation(e.getPoint()); // Pomera komponentu zajedno sa
// pointerom sve dok traje event
c.repaint(); // Može biti korisno, ali nije neophodno
}
}
Ovako se pomera komponenta, ali može da nervira to što je pointer(strelica) uvek u gornjem levom uglu komponente. To se vrlo lako može promeniti oduzimajući(?! a ne sabirajući ?!) neku vrednost od x, ili y - recimo
Code:
x=c.getX()-(c.getBounds().width/2);
i slično.
Postoji i awt.dnd paket u kome je javin drag'n'drop sistem ali je suviše komplikovan i nisam uspeo da ga prokljuvim. Da li neko ima iskustva sa time? Cenio bih ako bi ovde ukratako opisao suštinu rada sa ovim, verovatno dosta korisnim, paketom.