package Ġexample Ċ Ċ import Ġjava . awt .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjava . awt . event . ActionEvent Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjavax . swing .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjavax . swing . event . Ancestor Event Ċ import Ġjavax . swing . event . Ancestor Listener Ċ import Ġjavax . swing . pl af . basic . Basic Button UI Ċ Ċ fun Ġmake UI (): ĠComponent Ġ{ ĊĠ Ġval Ġtab bed Pane Ġ= ĠJ Tabbed Pane () ĊĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 3 ) Ġ{ ĊĠĠĠ Ġval Ġtitle Ġ= Ġ" Tab Ġ$ i " ĊĠĠĠ Ġtab bed Pane . add Tab ( title , ĠJLabel ( title )) ĊĠĠĠ Ġtab bed Pane . set Tab Component At ( i , ĠButton Tab Component ( tab bed Pane )) ĊĠ Ġ} ĊĠ Ġtab bed Pane . component PopupMenu Ġ= ĠTab Title Rename PopupMenu () ĊĠ Ġreturn ĠJPanel ( Border Layout ()). also Ġ{ ĊĠĠĠ Ġit . add ( tab bed Pane ) ĊĠĠĠ Ġit . preferred Size Ġ= ĠDimension ( 3 2 0 , Ġ 2 4 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠButton Tab Component ( val Ġtab bed Pane : ĠJ Tabbed Pane ) Ġ: ĠJPanel ( Flow Layout ( Flow Layout . LEFT , Ġ 0 , Ġ 0 )) Ġ{ ĊĠ Ġprivate Ġinner Ġclass ĠTab Button Handler Ġ: ĠMouse Adapter (), ĠActionListener Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAction Event ) Ġ{ ĊĠĠĠĠĠ Ġval Ġi Ġ= Ġtab bed Pane . indexOf Tab Component ( this @ Button Tab Component ) ĊĠĠĠĠĠ Ġif Ġ( i Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtab bed Pane . remove ( i ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Entered ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġ( e . component Ġas ? ĠAbstract Button )?. is Border Paint ed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmouse Exit ed ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠ Ġ( e . component Ġas ? ĠAbstract Button )?. is Border Paint ed Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġis Opaque Ġ= Ġfalse ĊĠĠĠ Ġval Ġlabel Ġ= Ġobject Ġ: ĠJLabel () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun ĠgetText (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġtab bed Pane . indexOf Tab Component ( this @ Button Tab Component ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( i Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtab bed Pane . getTitle At ( i ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġget Icon (): ĠIcon ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġtab bed Pane . indexOf Tab Component ( this @ Button Tab Component ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( i Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtab bed Pane . get Icon At ( i ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd ( label ) ĊĠĠĠ Ġlabel . border Ġ= ĠBorder Factory . create Empty Border ( 0 , Ġ 0 , Ġ 0 , Ġ 5 ) ĊĠĠĠ Ġval Ġbutton Ġ= ĠTab Button () ĊĠĠĠ Ġval Ġhandler Ġ= ĠTab Button Handler () ĊĠĠĠ Ġbutton . addActionListener ( handler ) ĊĠĠĠ Ġbutton . add Mouse Listener ( handler ) ĊĠĠĠ Ġadd ( button ) ĊĠĠĠ Ġborder Ġ= ĠBorder Factory . create Empty Border ( 2 , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠTab Button Ġ: ĠJButton () Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġset UI ( Basic Button UI ()) ĊĠĠĠ Ġtool Tip Text Ġ= Ġ" close Ġthis Ġtab " ĊĠĠĠ Ġis Content Area Filled Ġ= Ġfalse ĊĠĠĠ Ġis Focus able Ġ= Ġfalse ĊĠĠĠ Ġborder Ġ= ĠBorder Factory . create Et ched Border () ĊĠĠĠ Ġis Border Paint ed Ġ= Ġfalse ĊĠĠĠ Ġis R ollo ver Enabled Ġ= Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget PreferredSize () Ġ= ĠDimension ( SIZE , ĠSIZE ) ĊĊĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠ Ġ// Ġwe Ġdon 't Ġwant Ġto Ġupdate ĠUI Ġfor Ġthis Ġbutton ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġpaint Component ( g : ĠGraphics ) Ġ{ ĊĠĠĠ Ġsuper . paint Component ( g ) ĊĠĠĠ Ġval Ġg 2 Ġ= Ġg . create () Ġas ? ĠGraphics 2 D Ġ?: Ġreturn ĊĠĠĠ Ġg 2 . stroke Ġ= ĠBasic Stroke ( 2 f ) ĊĠĠĠ Ġg 2 . paint Ġ= ĠColor . BLACK ĊĠĠĠ Ġval Ġmodel Ġ= ĠgetModel () ĊĠĠĠ Ġif Ġ( model . is R ollo ver ) Ġ{ ĊĠĠĠĠĠ Ġg 2 . paint Ġ= ĠColor . OR ANGE ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( model . is Pressed ) Ġ{ ĊĠĠĠĠĠ Ġg 2 . paint Ġ= ĠColor . BLUE ĊĠĠĠ Ġ} ĊĠĠĠ Ġg 2 . draw Line ( DELTA , ĠDEL TA , Ġwidth Ġ- ĠDEL TA Ġ- Ġ 1 , Ġheight Ġ- ĠDEL TA Ġ- Ġ 1 ) ĊĠĠĠ Ġg 2 . draw Line ( width Ġ- ĠDEL TA Ġ- Ġ 1 , ĠDEL TA , ĠDEL TA , Ġheight Ġ- ĠDEL TA Ġ- Ġ 1 ) ĊĠĠĠ Ġg 2 . dispose () ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠSIZE Ġ= Ġ 1 7 ĊĠĠĠ Ġprivate Ġconst Ġval ĠDEL TA Ġ= Ġ 6 ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠTab Title Rename PopupMenu Ġ: ĠJ PopupMenu () Ġ{ ĊĠ Ġprivate Ġval Ġrename : ĠJ MenuItem ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġtext Field Ġ= ĠJTextField ( 1 0 ) ĊĠĠĠ Ġtext Field . add Ancestor Listener ( Focus Ancestor Listener ()) ĊĠĠĠ Ġrename Ġ= Ġadd (" rename ") ĊĠĠĠ Ġrename . addActionListener Ġ{ ĊĠĠĠĠĠ Ġ( inv oker Ġas ? ĠJ Tabbed Pane )?. also Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġidx Ġ= Ġit . selectedIndex ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . getTitle At ( idx ) ĊĠĠĠĠĠĠĠ Ġtext Field . text Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠJOptionPane . show Confirm Dialog ( ĊĠĠĠĠĠĠĠĠĠ Ġit , Ġtext Field , Ġ" Rename ", ĠJOptionPane . OK _ CANCEL _ OPTION , ĠJOptionPane . PLAIN _ MESSAGE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== ĠJOptionPane . OK _ OPTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġstr Ġ= Ġtext Field . text . trim () ĊĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġit . get Tab Component At ( idx ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( str . isNotEmpty () Ġ&& Ġc Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setTitle At ( idx , Ġstr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . re validate () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd Separator () ĊĠĠĠ Ġadd (" new Ġtab "). addActionListener Ġ{ ĊĠĠĠĠĠ Ġ( inv oker Ġas ? ĠJ Tabbed Pane )?. also Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġit . tab Count ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġ" Tab Ġ$ count " ĊĠĠĠĠĠĠĠ Ġit . add Tab ( title , ĠJLabel ( title )) ĊĠĠĠĠĠĠĠ Ġit . set Tab Component At ( count , ĠButton Tab Component ( it )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd (" close Ġall "). addActionListener Ġ{ Ġ( inv oker Ġas ? ĠJ Tabbed Pane )?. removeAll () Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġshow ( c : ĠComponent , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠ Ġif Ġ( c Ġis ĠJ Tabbed Pane ) Ġ{ ĊĠĠĠĠĠ Ġrename . isEnabled Ġ= Ġc . index At Location ( x , Ġy ) Ġ>= Ġ 0 ĊĠĠĠĠĠ Ġsuper . show ( c , Ġx , Ġy ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠFocus Ancestor Listener Ġ: ĠAn cestor Listener Ġ{ ĊĠ Ġoverride Ġfun Ġancestor Added ( e : ĠAn cestor Event ) Ġ{ ĊĠĠĠ Ġe . component . request Focus In Window () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġancestor Moved ( e : ĠAn cestor Event ) Ġ{ ĊĠĠĠ Ġ/* Ġnot Ġneeded Ġ*/ ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġancestor Removed ( e : ĠAn cestor 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 ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ