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 . table . Default TableModel Ċ import Ġjavax . swing . table . TableCell Editor Ċ import Ġjavax . swing . table . TableCell Renderer Ċ Ċ fun Ġmake UI (): ĠComponent Ġ{ ĊĠ Ġval Ġcolumn Names Ġ= ĠarrayOf (" Integer ", Ġ" String ", Ġ" Boolean ") ĊĠ Ġval Ġdata Ġ= ĠarrayOf ( ĊĠĠĠ ĠarrayOf ( 1 , Ġ" D ", Ġtrue ), ĊĠĠĠ ĠarrayOf ( 2 , Ġ" B ", Ġfalse ), ĊĠĠĠ ĠarrayOf ( 3 , Ġ" C ", Ġfalse ), ĊĠĠĠ ĠarrayOf ( 4 , Ġ" E ", Ġfalse ), ĊĠĠĠ ĠarrayOf ( 5 , Ġ" A ", Ġfalse ) ĊĠ Ġ) ĊĠ Ġval Ġmodel Ġ= Ġobject Ġ: ĠDefault TableModel ( data , Ġcolumn Names ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Column Class ( column : ĠInt ) Ġ= ĠgetValue At ( 0 , Ġcolumn ). java Class ĊĊĠĠĠ Ġoverride Ġfun ĠsetValue At ( v : ĠAny , Ġrow : ĠInt , Ġcolumn : ĠInt ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( v Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġrow Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġsuper . setValue At ( i Ġ== Ġrow , Ġi , Ġcolumn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setValue At ( v , Ġrow , Ġcolumn ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġval Ġtable Ġ= Ġobject Ġ: ĠJ Table ( model ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠĠĠ Ġsuper . update UI () ĊĠĠĠĠĠ Ġauto Create Row Sorter Ġ= Ġtrue ĊĠĠĠĠĠ Ġval Ġc Ġ= Ġget Column Model (). getColumn ( 2 ) ĊĠĠĠĠĠ Ġc . cell Renderer Ġ= ĠRadio Buttons Renderer () ĊĠĠĠĠĠ Ġc . cell Editor Ġ= ĠRadio Buttons Editor () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġreturn ĠJPanel ( Border Layout ()). also Ġ{ ĊĠĠĠ Ġit . add ( J ScrollPane ( table )) ĊĠĠĠ Ġit . preferred Size Ġ= ĠDimension ( 3 2 0 , Ġ 2 4 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠRadio Buttons Renderer Ġ: ĠTable Cell Renderer Ġ{ ĊĠ Ġprivate Ġval Ġrenderer Ġ= ĠJ RadioButton () ĊĠ Ġoverride Ġfun Ġget TableCell Renderer Component ( ĊĠĠĠ Ġtable : ĠJ Table , ĊĠĠĠ Ġvalue : ĠAny ?, ĊĠĠĠ Ġis Selected : ĠBoolean , ĊĠĠĠ Ġhas Focus : ĠBoolean , ĊĠĠĠ Ġrow : ĠInt , ĊĠĠĠ Ġcolumn : ĠInt ĊĠ Ġ): ĠComponent Ġ{ ĊĠĠĠ Ġif Ġ( value Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġrenderer . background Ġ= Ġif Ġ( isSelected ) Ġtable . selection Background Ġelse Ġtable . background ĊĠĠĠĠĠ Ġrenderer . horizontal Alignment Ġ= ĠSw ing Constants . CENTER ĊĠĠĠĠĠ Ġrenderer . isSelected Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrenderer ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠRadio Buttons Editor Ġ: ĠAbstract Cell Editor (), ĠTable Cell Editor Ġ{ ĊĠ Ġprivate Ġval Ġrenderer Ġ= ĠJ RadioButton (). also Ġ{ ĊĠĠĠ Ġit . addActionListener Ġ{ Ġfire Editing Stopped () Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget TableCell Editor Component ( ĊĠĠĠ Ġtable : ĠJ Table , ĊĠĠĠ Ġvalue : ĠAny ?, ĊĠĠĠ Ġis Selected : ĠBoolean , ĊĠĠĠ Ġrow : ĠInt , ĊĠĠĠ Ġcolumn : ĠInt ĊĠ Ġ): ĠComponent Ġ{ ĊĠĠĠ Ġif Ġ( value Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠ Ġrenderer . background Ġ= Ġtable . selection Background ĊĠĠĠĠĠ Ġrenderer . horizontal Alignment Ġ= ĠSw ing Constants . CENTER ĊĠĠĠĠĠ Ġrenderer . isSelected Ġ= Ġvalue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrenderer ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Cell Editor Value () Ġ= Ġrenderer . isSelected Ċ } Ċ Ċ 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 ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ