package Ġcom . def lated pickle . radial menu Ċ Ċ import Ġcom . thought works . x stream . X Stream Ċ import Ġjava . awt .* Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjava . awt . event . Key Adapter Ċ import Ġjava . awt . event . KeyEvent Ċ import Ġjavax . swing .* Ċ import Ġkotlin . math . pow ĊĊ Ċ fun Ġinside Radius ( origin : ĠPoint , Ġpoint : ĠPoint , Ġradius : ĠDouble ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ(( origin . x Ġ- Ġpoint . x ). toDouble (). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ( origin . y Ġ- Ġpoint . y ). toDouble (). pow ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ<= Ġradius . pow ( 2 )) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġfalse Ċ } ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġ// ĠLoad Ġthe ĠXML ĊĠĠĠ Ġval Ġx Stream Ġ= ĠX Stream () ĊĠĠĠ Ġx Stream . process Annotations ( Rad ial :: class . java ) ĊĠĠĠ Ġx Stream . process Annotations ( Button :: class . java ) ĊĠĠĠ Ġval Ġresult XML Ġ= Ġx Stream . from XML ( ClassLoader . getSystem Resource (" radial . xml ")) Ġas ĠRad ial ĊĊĠĠĠ Ġ// ĠTODO : ĠMove Ġthese Ġto Ġthe ĠXML Ġfile ĊĠĠĠ Ġval Ġwidth Ġ= Ġ 1 Ġ* ĠToolkit . getDefault Toolkit (). screen Resolution ĊĠĠĠ Ġval Ġheight Ġ= Ġ 1 Ġ* ĠToolkit . getDefault Toolkit (). screen Resolution Ġ/ Ġ 2 ĊĊĠĠĠ Ġval Ġradius Ġ= Ġ 1 0 Ġ* ĠToolkit . getDefault Toolkit (). screen Resolution Ġ/ Ġ 8 ĊĊĠĠĠ Ġvar Ġradial Open Ġ= Ġfalse ĊĠĠĠ Ġvar Ġcentre : ĠPoint ĊĠĠĠ Ġvar Ġselected Point Ġ= ĠPoint () ĊĊĠĠĠ Ġ// ĠFrame ĊĠĠĠ Ġval Ġframe Ġ= ĠJ Frame (" Rad ial Menu ") ĊĊĠĠĠ Ġval Ġpanel Ġ= Ġobject Ġ: ĠJPanel ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . paint Component ( g ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! radial Open ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmouse Info Ġ= ĠMouse Info . get Pointer Info (). location ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result XML . connections ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠUI Manager . getColor (" Button . select ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdraw Lines ( list : ĠList < Rad ial Button >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw Line ( i . parent Point . x , Ġi . parent Point . y , Ġi . x Ġ+ Ġ( width Ġ/ Ġ 2 ), Ġi . y Ġ+ Ġ( height Ġ/ Ġ 2 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Lines ( i . children ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Lines ( result XML . button List . map Ġ{ Ġit . radial Button Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result XML . follow er ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTest Ġif Ġthe Ġmouse Ġis Ġclose Ġenough Ġto Ġthe Ġselected Ġpoint ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inside Radius ( selected Point , Ġmouse Info , Ġ( radius Ġ* Ġ( Toolkit . getDefault Toolkit (). screen Resolution Ġ/ Ġ 3 4 )). toDouble ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . color Ġ= ĠUI Manager . getColor (" Button . select ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġg . draw Line ( selected Point . x , Ġselected Point . y , Ġmouse Info . x , Ġmouse Info . y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġpanel . layout Ġ= Ġnull ĊĠĠĠ Ġpanel . background Ġ= ĠColor ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠ Ġframe . add ( panel ) ĊĊĠĠĠ Ġframe . type Ġ= ĠWindow . Type . UT ILITY ĊĠĠĠ Ġframe . default Close Operation Ġ= ĠJ Frame . EXIT _ ON _ CLOSE ĊĊĠĠĠ Ġframe . is Un decor ated Ġ= Ġtrue ĊĠĠĠ Ġframe . is Always On Top Ġ= Ġtrue ĊĠĠĠ Ġframe . background Ġ= ĠColor ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĊĠĠĠ Ġframe . extended State Ġ= ĠJ Frame . MAX IM IZED _ BOTH ĊĊĠĠĠ Ġval Ġtimer Ġ= ĠTimer ( 3 0 , ĠActionListener Ġ{ ĊĠĠĠĠĠĠĠ Ġframe . rep aint () ĊĠĠĠ Ġ}). start () ĊĊĠĠĠ Ġframe . pack () ĊĠĠĠ Ġframe . isVisible Ġ= Ġtrue ĊĊĠĠĠ Ġframe . add Key Listener ( object Ġ: ĠKey Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġkey Pressed ( e : ĠKeyEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . key Char . toLowerCase () Ġ== Ġ' e ') Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpanel . removeAll () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġradial Open Ġ= Ġ! radial Open ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmouse Info Ġ= ĠMouse Info . get Pointer Info (). location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcentre Ġ= Ġmouse Info ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Point Ġ= Ġcentre ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( radial Open ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġadd Button Ring ( parent : ĠJ Component , Ġlist : ĠList < Button >, Ġorigin : ĠPoint , Ġradius : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġi ) Ġin Ġlist . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpanel . add ( Rad ial Button ( i . text ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . button Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . radial Button Ġ= Ġthis ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġ 2 Ġ* ĠMath . PI Ġ* Ġindex Ġ/ Ġlist . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Ġ= ĠMath . round ( origin . x Ġ+ Ġradius Ġ* ĠMath . cos ( t )). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĠMath . round ( origin . y Ġ+ Ġradius Ġ* ĠMath . sin ( t )). toInt () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Bounds ( x Ġ- Ġ( width Ġ/ Ġ 2 ), Ġy Ġ- Ġ( height Ġ/ Ġ 2 ), Ġwidth , Ġheight ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( parent Ġis ĠRad ial Button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent Ġ= Ġparent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent Point Ġ= Ġparent . location ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . children . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . parent Point Ġ= Ġcentre ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i . button List Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! this . shown Sub ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button Ring ( this , Ġi . button List , ĠPoint ( x , Ġy ), Ġradius ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . shown Sub Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Point Ġ= ĠPoint ( this . location . x Ġ+ Ġ( width Ġ/ Ġ 2 ), Ġthis . location . y Ġ+ Ġ( height Ġ/ Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremove List Ġ= Ġmutable ListOf < Rad ial Button >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġdestroy The Children ( list : ĠList < Rad ial Button >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( child Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( child . children . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy The Children ( child . children ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove List . add ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpanel . remove ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdestroy The Children ( this . children ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( removed Button Ġin Ġremove List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( removed Button . parent Ġis ĠRad ial Button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( removed Button . parent Ġas ĠRad ial Button ). children . remove ( removed Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . shown Sub Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Point Ġ= Ġif Ġ( this . parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPoint ( this . parent !!. location . x Ġ+ Ġ( width Ġ/ Ġ 2 ), Ġthis . parent !!. location . y Ġ+ Ġ( height Ġ/ Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcentre ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRuntime . get Runtime (). exec ( i . command ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Button Ring ( panel , Ġresult XML . button List , Ġmouse Info , Ġresult XML . button List . size Ġ* ĠToolkit . getDefault Toolkit (). screen Resolution Ġ/ Ġ 5 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpanel . re validate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġframe . rep aint () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ ĠUI Manager . set Look And Feel ( UI Manager . getSystem Look And Feel ClassName ()) ĊĊĠĠĠ Ġ// ĠSystem Ġtr ay ĊĠĠĠ Ġif Ġ( System Tray . is Supported ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsystem Tray Ġ= ĠSystem Tray . getSystem Tray () ĊĊĠĠĠĠĠĠĠ Ġval Ġmenu Context Ġ= ĠPopup Menu (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( MenuItem (" Exit "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ActionListener Ġ{ ĠSystem . exit ( 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtr ay Icon Ġ= ĠTr ay Icon ( Toolkit . getDefault Toolkit (). getImage (""), Ġ" Rad ial Menu ", Ġmenu Context ) ĊĠĠĠĠĠĠĠ Ġtr ay Icon . addActionListener Ġ{ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsystem Tray ?. add ( tray Icon ) ĊĠĠĠ Ġ} Ċ }