package Ġexample Ċ Ċ import Ġjava . awt .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ 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 . metal . Metal Look And Feel Ċ import Ġjavax . swing . tree . Default Mutable TreeNode Ċ import Ġjavax . swing . tree . Default Tree Model Ċ import Ġjavax . swing . tree . Tree Path Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ"< html >< b >" Ċ private Ġconst Ġval ĠB OLD _ MET AL Ġ= Ġ" swing . bold Metal " Ċ Ċ fun Ġmake UI (): ĠComponent Ġ{ ĊĠ Ġval Ġcheck Ġ= ĠJ CheckBox ( BOLD _ MET AL ) ĊĠ Ġcheck . addActionListener Ġ{ Ġe Ġ-> ĊĠĠĠ Ġ( e . source Ġas ? ĠJ CheckBox )?. also Ġ{ ĊĠĠĠĠĠ ĠUI Manager . put ( BOLD _ MET AL , Ġit . isSelected ) ĊĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠ ĠUI Manager . set Look And Feel ( Metal Look And Feel ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠSw ing Utilities . update Component Tree UI ( it . top Level Ancestor ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġval Ġtree Ġ= ĠJ Tree () ĊĠ Ġtree . component PopupMenu Ġ= ĠTree PopupMenu () ĊĊĠ Ġval Ġtab bed Pane Ġ= ĠJ Tabbed Pane () ĊĠ Ġtab bed Pane . border Ġ= ĠBorder Factory . create Title d Border (" Title d Border ") ĊĠ Ġtab bed Pane . add Tab ( TAG Ġ+ Ġ" J Tree ", ĠJ ScrollPane ( tree )) ĊĠ Ġtab bed Pane . add Tab (" JLabel ", ĠJLabel (" JLabel ")) ĊĠ Ġtab bed Pane . add Tab (" J TextArea ", ĠJ ScrollPane ( J TextArea (" J TextArea "))) ĊĠ Ġtab bed Pane . add Tab (" JButton ", ĠJ ScrollPane ( JButton (" JButton "))) ĊĠ Ġtab bed Pane . add ChangeListener Ġ{ Ġe Ġ-> ĊĠĠĠ Ġ( e . source Ġas ? ĠJ Tabbed Pane )?. also Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġit . tab Count ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġit . getTitle At ( i ) ĊĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġit . selectedIndex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . setTitle At ( i , ĠTAG Ġ+ Ġtitle ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( title . startsWith ( TAG )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . setTitle At ( i , Ġtitle . substring ( TAG . length )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġreturn ĠJPanel ( Border Layout ()). also Ġ{ ĊĠĠĠ Ġit . add ( check , ĠBorderLayout . NORTH ) ĊĠĠĠ Ġit . add ( tab bed Pane ) ĊĠĠĠ Ġit . preferred Size Ġ= ĠDimension ( 3 2 0 , Ġ 2 4 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠTree PopupMenu Ġ: ĠJ PopupMenu () Ġ{ ĊĠ Ġprivate Ġvar Ġpath : ĠTree Path ? Ġ= Ġnull ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġtext Field Ġ= Ġobject Ġ: ĠJTextField ( 2 4 ) Ġ{ ĊĠĠĠĠĠ Ġ@ Transient Ġprivate Ġvar Ġlistener : ĠAn cestor Listener ? Ġ= Ġnull ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Ancestor Listener ( listener ) ĊĠĠĠĠĠĠĠ Ġsuper . update UI () ĊĠĠĠĠĠĠĠ Ġlistener Ġ= ĠFocus Ancestor Listener () ĊĠĠĠĠĠĠĠ Ġadd Ancestor Listener ( listener ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd (" add "). addActionListener Ġ{ ĊĠĠĠĠĠ Ġ( inv oker Ġas ? ĠJ Tree )?. also Ġ{ Ġtree Ġ-> ĊĠĠĠĠĠĠĠ Ġ( tree . model Ġas ? ĠDefault Tree Model )?. also Ġ{ Ġmodel Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġ( path ?. last Path Component Ġas ? ĠDefault Mutable TreeNode )?. also Ġ{ Ġparent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= ĠDefault Mutable TreeNode (" New Ġnode ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . insert Node Into ( child , Ġparent , Ġparent . child Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree . scroll Path To Visible ( Tree Path ( child . path )) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd (" edit "). addActionListener Ġ{ ĊĠĠĠĠĠ Ġval Ġtree Ġ= Ġinvok er ĊĠĠĠĠĠ Ġval Ġnode Ġ= Ġpath ?. last Path Component ĊĠĠĠĠĠ Ġif Ġ( tree Ġis ĠJ Tree Ġ&& Ġnode Ġis ĠDefault Mutable TreeNode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtext Field . text Ġ= Ġnode . user Object . toString () ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= ĠJOptionPane . show Confirm Dialog ( ĊĠĠĠĠĠĠĠĠĠ Ġtree , ĊĠĠĠĠĠĠĠĠĠ Ġtext Field , ĊĠĠĠĠĠĠĠĠĠ Ġ" edit ", ĊĠĠĠĠĠĠĠĠĠ ĠJOptionPane . OK _ CANCEL _ OPTION , ĊĠĠĠĠĠĠĠĠĠ ĠJOptionPane . PLAIN _ MESSAGE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( ret Ġ== ĠJOptionPane . OK _ OPTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġtree . model . value For Path Changed ( path , Ġtext Field . text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd Separator () ĊĠĠĠ Ġadd (" remove "). addActionListener Ġ{ ĊĠĠĠĠĠ Ġval Ġtree Ġ= Ġinvok er ĊĠĠĠĠĠ Ġval Ġnode Ġ= Ġpath ?. last Path Component ĊĠĠĠĠĠ Ġif Ġ( tree Ġis ĠJ Tree Ġ&& Ġnode Ġis ĠDefault Mutable TreeNode Ġ&& Ġ! node . is Root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( tree . model Ġas ? ĠDefault Tree Model )?. remove Node From Parent ( node ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġshow ( c : ĠComponent , Ġx : ĠInt , Ġy : ĠInt ) Ġ{ ĊĠĠĠ Ġ( c Ġas ? ĠJ Tree )?. also Ġ{ Ġtree Ġ-> ĊĠĠĠĠĠ Ġpath Ġ= Ġtree . getPath For Location ( x , Ġy ) ĊĠĠĠĠĠ Ġpath ?. also Ġ{ ĊĠĠĠĠĠĠĠ Ġtree . selection Path Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ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 () Ġ{ ĊĠ ĠUI Manager . put (" swing . bold Metal ", Ġfalse ) ĊĠ ĠEvent Queue . invoke Later Ġ{ ĊĠĠĠ Ġ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 ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ