package Ġexample Ċ Ċ import Ġjava . awt .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjava . awt . datat rans fer . Data Flavor Ċ import Ġjava . awt . datat rans fer . Transfer able Ċ import Ġjava . awt . d nd . Dn D Constants Ċ import Ġjava . awt . d nd . Drag Gesture Event Ċ import Ġjava . awt . d nd . Drag Gesture Listener Ċ import Ġjava . awt . d nd . Drag Source Ċ import Ġjava . awt . d nd . Drag Source Drag Event Ċ import Ġjava . awt . d nd . Drag Source Drop Event Ċ import Ġjava . awt . d nd . Drag Source Event Ċ import Ġjava . awt . d nd . Drag Source Listener Ċ import Ġjava . awt . d nd . Drop Target Ċ import Ġjava . awt . d nd . Drop Target Drag Event Ċ import Ġjava . awt . d nd . Drop Target Drop Event Ċ import Ġjava . awt . d nd . Drop Target Event Ċ import Ġjava . awt . d nd . Drop Target Listener Ċ import Ġjavax . swing .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ Ċ fun Ġmake UI () Ġ= ĠJPanel ( Border Layout ()). also Ġ{ ĊĠ Ġval Ġmodel Ġ= ĠDefault ListModel < String >() ĊĠ Ġmodel . addElement (" 1 1 1 1 ") ĊĠ Ġmodel . addElement (" 2 2 2 2 2 2 2 2 ") ĊĠ Ġmodel . addElement (" 3 3 3 3 3 3 3 3 3 3 3 3 ") ĊĠ Ġmodel . addElement (" <<<< << ---- >>>> >> ") ĊĠ Ġmodel . addElement (" =========== =") ĊĠ Ġmodel . addElement (" **** ") ĊĊĠ Ġval Ġlist Ġ= ĠD n D List < String >() ĊĠ Ġlist . model Ġ= Ġmodel ĊĊĠ Ġit . add ( J ScrollPane ( list )) ĊĠ Ġit . preferred Size Ġ= ĠDimension ( 3 2 0 , Ġ 2 4 0 ) Ċ } Ċ Ċ private Ġclass ĠD n D List < E > Ġ: ĠJ List < E >(), ĠDrag Gesture Listener , ĠTransfer able Ġ{ ĊĠ Ġprivate Ġval Ġtarget Line Ġ= ĠRectangle () ĊĠ Ġprivate Ġvar Ġdrag ged Index Ġ= Ġ- 1 ĊĠ Ġprivate Ġvar Ġtarget Index Ġ= Ġ- 1 ĊĠ Ġprivate Ġval Ġd sl Ġ= ĠList Drag Source Listener () ĊĊĠ Ġinit Ġ{ ĊĠĠĠ ĠDrop Target ( this , ĠD n D Constants . ACTION _ COPY _ OR _ MOVE , ĠC Drop Target Listener (), Ġtrue ) ĊĠĠĠ ĠDrag Source . getDefault Drag Source (). create Default Drag Gesture Recognizer ( this , ĠD n D Constants . ACTION _ COPY _ OR _ MOVE , Ġthis ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠ Ġcell Renderer Ġ= Ġnull ĊĠĠĠ Ġsuper . update UI () ĊĠĠĠ Ġval Ġrenderer Ġ= Ġcell Renderer ĊĠĠĠ Ġset Cell Renderer Ġ{ Ġlist , Ġvalue , Ġindex , Ġis Selected , Ġcell Has Focus Ġ-> ĊĠĠĠĠĠ Ġrenderer . getList Cell Renderer Component ( list , Ġvalue , Ġindex , Ġis Selected , Ġcell Has Focus ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . foreground Ġ= Ġlist . selection Foreground ĊĠĠĠĠĠĠĠĠĠ Ġit . background Ġ= Ġlist . selection Background ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . foreground Ġ= Ġlist . foreground ĊĠĠĠĠĠĠĠĠĠ Ġit . background Ġ= Ġif Ġ( index Ġ% Ġ 2 Ġ== Ġ 0 ) ĠEVEN _ BACKGROUND Ġelse Ġlist . background ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠ Ġsuper . paint Component ( g ) ĊĠĠĠ Ġif Ġ( target Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġg 2 Ġ= Ġg . create () Ġas ? ĠGraphics 2 D Ġ?: Ġreturn ĊĠĠĠĠĠ Ġg 2 . paint Ġ= ĠLINE _ COLOR ĊĠĠĠĠĠ Ġg 2 . fill ( target Line ) ĊĠĠĠĠĠ Ġg 2 . dispose () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinit Target Line ( p : ĠPoint ) Ġ{ ĊĠĠĠ Ġval Ġrect Ġ= Ġget Cell Bounds ( 0 , Ġ 0 ) ĊĠĠĠ Ġval Ġcell Height Ġ= Ġrect . height ĊĠĠĠ Ġval Ġline Height Ġ= Ġ 2 ĊĠĠĠ Ġval Ġmodel Size Ġ= Ġmodel . size ĊĠĠĠ Ġtarget Index Ġ= Ġ- 1 ĊĠĠĠ Ġtarget Line . setSize ( rect . width , Ġline Height ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmodel Size ) Ġ{ ĊĠĠĠĠĠ Ġrect . setLocation ( 0 , Ġcell Height Ġ* Ġi Ġ- Ġcell Height Ġ/ Ġ 2 ) ĊĠĠĠĠĠ Ġif Ġ( rect . contains ( p )) Ġ{ ĊĠĠĠĠĠĠĠ Ġtarget Index Ġ= Ġi ĊĠĠĠĠĠĠĠ Ġtarget Line . setLocation ( 0 , Ġi Ġ* Ġcell Height ) ĊĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( target Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġtarget Index Ġ= Ġmodel Size ĊĠĠĠĠĠ Ġtarget Line . setLocation ( 0 , Ġtarget Index Ġ* Ġcell Height Ġ- Ġline Height ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// ĠInterface : ĠDrag Gesture Listener ĊĠ Ġoverride Ġfun Ġdrag Gesture Re cognized ( e : ĠDrag Gesture Event ) Ġ{ ĊĠĠĠ Ġval Ġone Or More Ġ= Ġselected Indices . size Ġ> Ġ 1 ĊĠĠĠ Ġdrag ged Index Ġ= Ġlocation To Index ( e . drag Origin ) ĊĠĠĠ Ġif Ġ( one Or More Ġ|| Ġdrag ged Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠ Ġe . start Drag ( Drag Source . Default Move Drop , Ġthis , Ġd sl ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// ĠInterface : ĠTransfer able ĊĠ Ġoverride Ġfun Ġget Transfer Data ( flavor : ĠData Flavor ) Ġ= Ġthis ĊĊĠ Ġoverride Ġfun Ġget Transfer Data Fl avors () Ġ= ĠarrayOf ( FL AV OR ) ĊĊĠ Ġoverride Ġfun Ġis Data Flavor Supported ( flavor : ĠData Flavor ) Ġ= Ġflavor . human Present able Name Ġ== ĠNAME ĊĊĠ Ġprivate Ġinner Ġclass ĠC Drop Target Listener Ġ: ĠDrop Target Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdrag Exit ( e : ĠDrop Target Event ) Ġ{ ĊĠĠĠĠĠ Ġtarget Index Ġ= Ġ- 1 ĊĠĠĠĠĠ Ġrep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrag Enter ( e : ĠDrop Target Drag Event ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( is Drag Accept able ( e )) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . accept Drag ( e . drop Action ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġe . reject Drag () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrag Over ( e : ĠDrop Target Drag Event ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( is Drag Accept able ( e )) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . accept Drag ( e . drop Action ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġe . reject Drag () ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġinit Target Line ( e . location ) ĊĠĠĠĠĠ Ġrep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrop Action Changed ( e : ĠDrop Target Drag Event ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġif Ġ( is Drag Accept able ( e )) Ġ{ ĊĠĠĠĠĠ Ġ// ĠĠ Ġe . accept Drag ( e . get Drop Action ()); ĊĠĠĠĠĠ Ġ// Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ// ĠĠ Ġe . reject Drag (); ĊĠĠĠĠĠ Ġ// Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdrop ( e : ĠDrop Target Drop Event ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmodel Ġ= Ġmodel Ġas ? ĠDefault ListModel < E > Ġ?: Ġreturn ĊĠĠĠĠĠ Ġif Ġ( is Drop Accept able ( e ) Ġ&& Ġtarget Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġmodel [ drag ged Index ] ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtarget Index Ġ== Ġdrag ged Index Ġ-> Ġset SelectedIndex ( target Index ) ĊĠĠĠĠĠĠĠĠĠ Ġtarget Index Ġ< Ġdrag ged Index Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . remove ( drag ged Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . add ( target Index , Ġstr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset SelectedIndex ( target Index ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . add ( target Index , Ġstr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . remove ( drag ged Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset SelectedIndex ( target Index Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġe . drop Complete ( true ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġe . drop Complete ( false ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġe . drop Complete ( false ) ĊĠĠĠĠĠ Ġtarget Index Ġ= Ġ- 1 ĊĠĠĠĠĠ Ġrep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Drag Accept able ( e : ĠDrop Target Drag Event ) Ġ= Ġis Data Flavor Supported ( e . current Data Fl avors [ 0 ]) ĊĊĠĠĠ Ġprivate Ġfun Ġis Drop Accept able ( e : ĠDrop Target Drop Event ) Ġ= Ġis Data Flavor Supported ( e . transfer able . transfer Data Fl avors [ 0 ]) ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠLINE _ COLOR Ġ= ĠColor ( 0 x 6 4 _ 6 4 _ FF ) ĊĠĠĠ Ġprivate Ġconst Ġval ĠNAME Ġ= Ġ" test " ĊĠĠĠ Ġprivate Ġval ĠFL AV OR Ġ= ĠData Flavor ( Data Flavor . java JVM Local Object MimeType , ĠNAME ) ĊĠĠĠ Ġprivate Ġval ĠEVEN _ BACKGROUND Ġ= ĠColor ( 0 xF 0 _ F 0 _ F 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠList Drag Source Listener Ġ: ĠDrag Source Listener Ġ{ ĊĠ Ġoverride Ġfun Ġdrag Enter ( e : ĠDrag Source Drag Event ) Ġ{ ĊĠĠĠ Ġe . drag Source Context . cursor Ġ= ĠDrag Source . Default Move Drop ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdrag Exit ( e : ĠDrag Source Event ) Ġ{ ĊĠĠĠ Ġe . drag Source Context . cursor Ġ= ĠDrag Source . Default Move No Drop ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdrag Over ( e : ĠDrag Source Drag Event ) Ġ{ ĊĠĠĠ Ġ/* Ġnot Ġneeded Ġ*/ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdrop Action Changed ( e : ĠDrag Source Drag Event ) Ġ{ ĊĠĠĠ Ġ/* Ġnot Ġneeded Ġ*/ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdrag Drop End ( e : ĠDrag Source Drop Event ) Ġ{ ĊĠĠĠ Ġ/* Ġnot Ġneeded Ġ*/ ĊĠ Ġ} Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠ ĠEvent Queue . invoke Later Ġ{ ĊĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠ ĠUI Manager . set Look And Feel ( UI Manager . getSystem Look And Feel ClassName ()) ĊĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠ ĠToolkit . getDefault Toolkit (). be ep () ĊĠĠĠ Ġ} ĊĠĠĠ ĠJ Frame (). apply Ġ{ ĊĠĠĠĠĠ Ġdefault Close Operation Ġ= ĠWindow Constants . EXIT _ ON _ CLOSE ĊĠĠĠĠĠ Ġcontent Pane . add ( make UI ()) ĊĠĠĠĠĠ Ġpack () ĊĠĠĠĠĠ Ġset Location Relative To ( null ) ĊĠĠĠĠĠ Ġis Visible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ