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 . datat rans fer . Unsupported Flavor Exception Ċ import Ġjava . awt . d nd . Drag Source Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjava . awt . geom . Path 2 D Ċ import Ġjava . awt . image . Filtered Image Source Ċ import Ġjava . awt . image . RGB Image Filter Ċ import Ġjavax . swing .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjavax . swing . border . Border Ċ import Ġjavax . swing . event . Mouse Input Adapter Ċ import Ġjavax . swing . event . Mouse Input Listener Ċ Ċ fun Ġmake UI (): ĠComponent Ġ{ ĊĠ Ġval Ġmodel Ġ= ĠDefault ListModel < ListItem >(). also Ġ{ ĊĠĠĠ Ġ// Ġ[ XP ĠStyle ĠIcons Ġ- ĠDownload ]( https :// xp - style - icons . en . soft onic . com /) ĊĠĠĠ Ġit . addElement ( ListItem (" wi 0 0 0 9 - 3 2 ", Ġ" wi 0 0 0 9 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" 1 2 3 4 5 ", Ġ" wi 0 0 5 4 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" wi 0 0 6 2 - 3 2 . png ", Ġ" wi 0 0 6 2 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" test ", Ġ" wi 0 0 6 3 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" 3 2 . png ", Ġ" wi 0 0 6 4 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" wi 0 0 9 6 - 3 2 . png ", Ġ" wi 0 0 9 6 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" 6 8 9 6 ", Ġ" wi 0 1 1 1 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" t 4 6 7 4 6 7 est ", Ġ" wi 0 1 2 2 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" test 1 2 3 ", Ġ" wi 0 1 2 4 - 3 2 . png ")) ĊĠĠĠ Ġit . addElement ( ListItem (" test ( 1 )", Ġ" wi 0 1 2 6 - 3 2 . png ")) ĊĠ Ġ} ĊĠ Ġval Ġlist Ġ= ĠRe ordering List ( model ) ĊĠ Ġlist . border Ġ= ĠBorder Factory . create Empty Border ( 1 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) ĊĠ Ġreturn ĠJPanel ( Border Layout ()). also Ġ{ ĊĠĠĠ Ġit . add ( J ScrollPane ( list )) ĊĠĠĠ Ġit . preferred Size Ġ= ĠDimension ( 3 2 0 , Ġ 2 4 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġdata Ġclass ĠListItem ( val Ġtitle : ĠString , Ġval Ġicon File : ĠString ) Ġ{ ĊĠ Ġval Ġicon Ġ= ĠImage Icon ( java Class . getResource ( icon File )) ĊĠ Ġval Ġselected Icon : ĠImage Icon ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġip Ġ= ĠFilter ed Image Source ( icon . image . source , ĠSelected Image Filter ()) ĊĠĠĠ Ġselected Icon Ġ= ĠImage Icon ( Toolkit . getDefault Toolkit (). create Image ( ip )) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠRe ordering List ( model : ĠList Model < ListItem >) Ġ: ĠJ List < ListItem >( model ) Ġ{ ĊĠ Ġprivate Ġvar Ġr bl : ĠMouse Input Listener ? Ġ= Ġnull ĊĠ Ġprivate Ġvar Ġrub ber Band Color : ĠColor ? Ġ= Ġnull ĊĠ Ġprivate Ġval Ġrub ber Band Ġ= ĠPath 2 D . Double () ĊĊĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠ Ġselection Foreground Ġ= Ġnull Ġ// ĠNim bus ĊĠĠĠ Ġselection Background Ġ= Ġnull Ġ// ĠNim bus ĊĠĠĠ Ġcell Renderer Ġ= Ġnull ĊĠĠĠ Ġtransfer Handler Ġ= Ġnull ĊĠĠĠ Ġremove Mouse Listener ( r bl ) ĊĠĠĠ Ġremove Mouse Motion Listener ( r bl ) ĊĠĠĠ Ġsuper . update UI () ĊĠĠĠ Ġrub ber Band Color Ġ= Ġmake Rub ber Band Color ( selection Background ) ĊĠĠĠ Ġlayout Orientation Ġ= ĠH ORIZONTAL _ WRAP ĊĠĠĠ Ġvisible RowCount Ġ= Ġ 0 ĊĠĠĠ Ġfixed Cell Width Ġ= Ġ 6 2 ĊĠĠĠ Ġfixed Cell Height Ġ= Ġ 6 2 ĊĠĠĠ Ġborder Ġ= ĠBorder Factory . create Empty Border ( 1 0 , Ġ 1 0 , Ġ 1 0 , Ġ 1 0 ) ĊĠĠĠ Ġcell Renderer Ġ= ĠList ItemList Cell Renderer () ĊĊĠĠĠ Ġr bl Ġ= ĠRub ber Band ing Listener () ĊĠĠĠ Ġadd Mouse Motion Listener ( r bl ) ĊĠĠĠ Ġadd Mouse Listener ( r bl ) ĊĊĠĠĠ Ġ// Ġput Client Property (" List . is FileList ", Ġtrue ) ĊĠĠĠ Ġselection Model . selection Mode Ġ= ĠList Selection Model . MULTIPLE _ INTERVAL _ SELECTION ĊĠĠĠ Ġtransfer Handler Ġ= ĠListItem Transfer Handler () ĊĠĠĠ Ġdrop Mode Ġ= ĠDrop Mode . INSERT ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠ Ġsuper . paint Component ( g ) ĊĠĠĠ Ġif Ġ( drag Enabled ) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġg 2 Ġ= Ġg . create () Ġas ? ĠGraphics 2 D Ġ?: Ġreturn ĊĠĠĠ Ġg 2 . paint Ġ= Ġselection Background ĊĠĠĠ Ġg 2 . draw ( rub ber Band ) ĊĠĠĠ Ġg 2 . composite Ġ= ĠAL PH A ĊĠĠĠ Ġg 2 . paint Ġ= Ġrub ber Band Color ĊĠĠĠ Ġg 2 . fill ( rub ber Band ) ĊĠĠĠ Ġg 2 . dispose () ĊĠ Ġ} ĊĊĠ Ġprivate Ġinner Ġclass ĠRub ber Band ing Listener Ġ: ĠMouse Input Adapter () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsrc Point Ġ= ĠPoint () ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Drag ged ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġval Ġl Ġ= Ġ( e . component Ġas ? ĠJ List <* >) ?. take Unless Ġ{ Ġit . drag Enabled Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠ Ġval Ġdest Point Ġ= Ġe . point ĊĠĠĠĠĠ Ġrub ber Band . reset () ĊĠĠĠĠĠ Ġrub ber Band . moveTo ( src Point . getX (), Ġsrc Point . getY ()) ĊĠĠĠĠĠ Ġrub ber Band . lineTo ( dest Point . getX (), Ġsrc Point . getY ()) ĊĠĠĠĠĠ Ġrub ber Band . lineTo ( dest Point . getX (), Ġdest Point . getY ()) ĊĠĠĠĠĠ Ġrub ber Band . lineTo ( src Point . getX (), Ġdest Point . getY ()) ĊĠĠĠĠĠ Ġrub ber Band . close Path () ĊĊĠĠĠĠĠ Ġval Ġindices Ġ= Ġ( 0 Ġuntil Ġl . model . size ) ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġrub ber Band . intersect s ( l . getCell Bounds ( it , Ġit )) Ġ}. to IntArray () ĊĠĠĠĠĠ Ġl . selected Indices Ġ= Ġindices ĊĠĠĠĠĠ Ġl . rep aint () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Released ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġ( e . component Ġas ? ĠJ List <* >) ?. also Ġ{ ĊĠĠĠĠĠĠĠ Ġrub ber Band . reset () ĊĠĠĠĠĠĠĠ Ġit . is Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġit . drag Enabled Ġ= Ġit . selected Indices . isNotEmpty () ĊĠĠĠĠĠĠĠ Ġit . rep aint () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Pressed ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġval Ġl Ġ= Ġe . component Ġas ? ĠJ List < *> Ġ?: Ġreturn ĊĠĠĠĠĠ Ġval Ġindex Ġ= Ġl . location To Index ( e . point ) ĊĠĠĠĠĠ Ġval Ġrect Ġ= Ġl . getCell Bounds ( index , Ġindex ) ĊĠĠĠĠĠ Ġif Ġ( rect . contains ( e . point )) Ġ{ ĊĠĠĠĠĠĠĠ Ġl . is Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( l . drag Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġl . setSelected Index ( index ) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġl . clear Selection () ĊĠĠĠĠĠĠĠ Ġl . selection Model . anchor Selection Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġl . selection Model . lead Selection Index Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġl . is Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġl . set Drag Enabled ( false ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġsrc Point . location Ġ= Ġe . point ĊĠĠĠĠĠ Ġl . rep aint () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠAL PH A Ġ= ĠAlpha Composite . getInstance ( Alpha Composite . SRC _ OVER , Ġ. 1 f ) ĊĊĠĠĠ Ġprivate Ġfun Ġmake Rub ber Band Color ( c : ĠColor ): ĠColor Ġ{ ĊĠĠĠĠĠ Ġval Ġr Ġ= Ġc . red ĊĠĠĠĠĠ Ġval Ġg Ġ= Ġc . green ĊĠĠĠĠĠ Ġval Ġb Ġ= Ġc . blue ĊĠĠĠĠĠ Ġval Ġv Ġ= Ġwhen Ġ( val Ġmax Ġ= Ġmax Of ( r , Ġg , Ġb )) Ġ{ ĊĠĠĠĠĠĠĠ Ġr Ġ-> Ġmax Ġshl Ġ 8 ĊĠĠĠĠĠĠĠ Ġg Ġ-> Ġmax Ġshl Ġ 4 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmax ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĠColor ( v ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠSelected Image Filter Ġ: ĠRGB Image Filter () Ġ{ ĊĠ Ġoverride Ġfun Ġfilter RGB ( x : ĠInt , Ġy : ĠInt , Ġarg b : ĠInt ) Ġ= ĊĠĠĠ Ġarg b Ġand Ġ 0 xFF _ FF _ FF _ 0 0 . toInt () Ġor Ġ( arg b Ġand Ġ 0 xFF Ġshr Ġ 1 ) Ċ } Ċ Ċ private Ġclass ĠList ItemList Cell Renderer Ġ: ĠList Cell Renderer < ListItem > Ġ{ ĊĠ Ġprivate Ġval Ġrenderer Ġ= ĠJPanel ( Border Layout ()) ĊĠ Ġprivate Ġval Ġicon Ġ= ĠJLabel ( null Ġas ? ĠIcon ?, ĠSw ing Constants . CENTER ) ĊĠ Ġprivate Ġval Ġlabel Ġ= ĠJLabel ("", ĠSw ing Constants . CENTER ) ĊĠ Ġprivate Ġval Ġfocus Border Ġ= ĠUI Manager . get Border (" List . focus Cell Highlight Border ") ĊĠ Ġprivate Ġval Ġno Focus Border Ġ= ĠUI Manager . get Border (" List . no Focus Border ") Ġ?: Ġget Nim bus No Focus Border () ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġicon . is Opaque Ġ= Ġfalse ĊĠĠĠ Ġlabel . foreground Ġ= Ġrenderer . foreground ĊĠĠĠ Ġlabel . background Ġ= Ġrenderer . background ĊĠĠĠ Ġlabel . border Ġ= Ġno Focus Border ĊĠĠĠ Ġrenderer . is Opaque Ġ= Ġfalse ĊĠĠĠ Ġrenderer . border Ġ= ĠBorder Factory . create Empty Border ( 2 , Ġ 2 , Ġ 2 , Ġ 2 ) ĊĠĠĠ Ġrenderer . add ( icon ) ĊĠĠĠ Ġrenderer . add ( label , ĠBorderLayout . SO UTH ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Nim bus No Focus Border (): ĠBorder Ġ{ ĊĠĠĠ Ġval Ġi Ġ= Ġfocus Border . get Border Insets ( label ) ĊĠĠĠ Ġreturn ĠBorder Factory . create Empty Border ( i . top , Ġi . left , Ġi . bottom , Ġi . right ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetList Cell Renderer Component ( ĊĠĠĠ Ġlist : ĠJ List < out ĠListItem >, ĊĠĠĠ Ġvalue : ĠListItem , ĊĠĠĠ Ġindex : ĠInt , ĊĠĠĠ Ġis Selected : ĠBoolean , ĊĠĠĠ Ġcell Has Focus : ĠBoolean ĊĠ Ġ): ĠComponent Ġ{ ĊĠĠĠ Ġlabel . text Ġ= Ġvalue . title ĊĠĠĠ Ġlabel . border Ġ= Ġif Ġ( cell Has Focus ) Ġfocus Border Ġelse Ġno Focus Border ĊĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠ Ġicon . icon Ġ= Ġvalue . selected Icon ĊĠĠĠĠĠ Ġlabel . foreground Ġ= Ġlist . selection Foreground ĊĠĠĠĠĠ Ġlabel . background Ġ= Ġlist . selection Background ĊĠĠĠĠĠ Ġlabel . is Opaque Ġ= Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġicon . icon Ġ= Ġvalue . icon ĊĠĠĠĠĠ Ġlabel . foreground Ġ= Ġlist . foreground ĊĠĠĠĠĠ Ġlabel . background Ġ= Ġlist . background ĊĠĠĠĠĠ Ġlabel . is Opaque Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrenderer ĊĠ Ġ} Ċ } Ċ Ċ // ĠDemo Ġ- ĠBasic Dn D Ġ( The ĠJava éĤ ĥ ï½ ¢ ĠTutorial s Ġ> ĠCreating Ġa ĠGUI ĠWith ĠJ FC / Swing Ġ> ĠDrag Ġand ĠDrop Ġand ĠData ĠTransfer ) Ċ // Ġhttps :// docs . oracle . com / javase / tutorial / uis wing / d nd / basic demo . html Ċ private Ġclass ĠListItem Transfer Handler Ġ: ĠTransfer Handler () Ġ{ ĊĠ Ġprivate Ġval Ġselected Indices Ġ= Ġmutable ListOf < Int >() ĊĠ Ġprivate Ġvar Ġadd Index Ġ= Ġ- 1 Ġ// ĠLocation Ġwhere Ġitems Ġwere Ġadded ĊĠ Ġprivate Ġvar Ġadd Count Ġ= Ġ 0 Ġ// ĠNumber Ġof Ġitems Ġadded . ĊĊĠ Ġoverride Ġfun Ġcreate Transfer able ( c : ĠJ Component ): ĠTransfer able Ġ{ ĊĠĠĠ Ġval Ġsource Ġ= Ġc Ġas ? ĠJ List < *> ĊĠĠĠ Ġc . root Pane . glass Pane . isVisible Ġ= Ġtrue ĊĠĠĠ Ġreturn Ġobject Ġ: ĠTransfer able Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġget Transfer Data Fl avors () Ġ= ĠarrayOf ( FL AV OR ) ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġis Data Flavor Supported ( flavor : ĠData Flavor ) Ġ= ĠFL AV OR Ġ== Ġflavor ĊĊĠĠĠĠĠ Ġ@ Throws ( Unsupported Flavor Exception :: class ) ĊĠĠĠĠĠ Ġoverride Ġfun Ġget Transfer Data ( flavor : ĠData Flavor ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Data Flavor Supported ( flavor ) Ġ&& Ġsource Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsource . selected Indices . forEach Ġ{ Ġselected Indices . add ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġsource . selected Values List ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠUnsupported Flavor Exception ( flavor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcan Import ( info : ĠTransfer Support ) Ġ= ĊĠĠĠ Ġinfo . is Drop Ġ&& Ġinfo . is Data Flavor Supported ( FL AV OR ) ĊĊĠ Ġoverride Ġfun Ġget Source Actions ( c : ĠJ Component ): ĠInt Ġ{ ĊĠĠĠ Ġprintln (" getSource Actions ") ĊĠĠĠ Ġc . root Pane . glass Pane . cursor Ġ= ĠDrag Source . Default Move Drop ĊĠĠĠ Ġreturn ĠMOVE Ġ// ĠCOPY _ OR _ MOVE ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġimport Data ( info : ĠTransfer Support ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġdl Ġ= Ġinfo . drop Location ĊĠĠĠ Ġval Ġtarget Ġ= Ġinfo . component Ġas ? ĠJ List < *> ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġval Ġlist Model Ġ= Ġtarget ?. model Ġas ? ĠDefault ListModel < Any > ĊĠĠĠ Ġif Ġ( dl Ġ! is ĠJ List . Drop Location Ġ|| Ġlist Model Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġmax Ġ= Ġlist Model . size ĊĠĠĠ Ġvar Ġindex Ġ= Ġdl . index . take If Ġ{ Ġit Ġin Ġ 0 Ġuntil Ġmax Ġ} Ġ?: Ġmax ĊĠĠĠ Ġadd Index Ġ= Ġindex ĊĠĠĠ Ġval Ġvalues Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠ Ġinfo . transfer able . get Transfer Data ( FL AV OR ) Ġas ? ĠList < *> ĊĠĠĠ Ġ}. get OrNull (). or Empty () ĊĠĠĠ Ġfor Ġ( o Ġin Ġvalues ) Ġ{ ĊĠĠĠĠĠ Ġval Ġi Ġ= Ġindex ++ ĊĠĠĠĠĠ Ġlist Model . add ( i , Ġo ) ĊĠĠĠĠĠ Ġtarget . add Selection Interval ( i , Ġi ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd Count Ġ= Ġvalues . size ĊĠĠĠ Ġreturn Ġadd Count Ġ> Ġ 0 ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġexport Done ( c : ĠJ Component , Ġdata : ĠTransfer able , Ġaction : ĠInt ) Ġ{ ĊĠĠĠ Ġprintln (" export Done ") ĊĠĠĠ Ġval Ġg lass Pane Ġ= Ġc . root Pane . glass Pane ĊĠĠĠ Ġg lass Pane . isVisible Ġ= Ġfalse ĊĠĠĠ Ġcleanup ( c , Ġaction Ġ== ĠMOVE ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcleanup ( c : ĠJ Component , Ġremove : ĠBoolean ) Ġ{ ĊĠĠĠ Ġif Ġ( remove Ġ&& Ġselected Indices . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġ// ĠIf Ġwe Ġare Ġmoving Ġitems Ġaround Ġin Ġthe Ġsame Ġlist , Ġwe ĊĠĠĠĠĠ Ġ// Ġneed Ġto Ġadjust Ġthe Ġindices Ġaccordingly , Ġsince Ġthose ĊĠĠĠĠĠ Ġ// Ġafter Ġthe Ġinsertion Ġpoint Ġhave Ġmoved . ĊĠĠĠĠĠ Ġval Ġselected List Ġ= Ġif Ġ( add Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Indices . map Ġ{ Ġif Ġ( it Ġ>= Ġadd Index ) Ġit Ġ+ Ġadd Count Ġelse Ġit Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġselected Indices . toList () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ(( c Ġas ? ĠJ List <* >) ?. model Ġas ? ĠDefault ListModel <* >) ?. also Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġselected List . indices . reversed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġmodel . remove ( selected List [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġselected Indices . clear () ĊĠĠĠ Ġadd Count Ġ= Ġ 0 ĊĠĠĠ Ġadd Index Ġ= Ġ- 1 ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠFL AV OR Ġ= ĠData Flavor ( Mutable List :: class . java , Ġ" List Ġof Ġitems ") ĊĠ Ġ} Ċ } Ċ Ċ 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 ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ