[ PaGud @ 29.12.2004. 08:20 ] @
Kada vucem recimo dugme po formi dolazi do treperenja i dugme se cesto pojavljuje na totalno drugoj poziciji daleko od kursora.

Napravio sam event handler(Button klase) za drag&drop i iz njegovog parametra(zaboravih ime event klase) uzimam poziciju kursora i na tu poziciju postavljam dugme.

Kod ide otprilike ovako:

DragEvent(Event evt)
{
Point p=evt.getMousePosition();
Dugme.setPosition(p);
}
[ samilen @ 15.01.2005. 00:11 ] @
I ja imam isti problem. Samo sa JToggleButton-om.
O cemu se radi?
Koristim MouseMotionAdapter i uzimam poziciju eventa i dodeljujem je dugmetu.
Kada prevlacim dugme ono u jednoj tacki skokne na odprilike-gornji-levi-kraj prozora, a u sledecoj tacki se naguzi kod strelice i tako naizmenicno. jos sam primetio i da se dugme sporije krece od misa (ako zanemarimo problem treperenja).
Primetio sam paket java.awt.dnd, ali ne znam kako da dodam ove listenere u JToggleButton.
[ samilen @ 21.01.2005. 00:35 ] @
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.
[ PaGud @ 21.01.2005. 19:10 ] @
Imas na Sun-ovom sajtu i u dokumentaciji posebnu temu o dnd-u.Pogledaj na Sun-ovom forumu ima odlicnih primera