package Ġexample Ċ Ċ import Ġjava . awt .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjavax . swing .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjavax . swing . table . Default TableCell Renderer Ċ import Ġjavax . swing . table . Default TableModel Ċ import Ġjavax . swing . table . TableCell Editor Ċ import Ġjavax . swing . table . TableCell Renderer Ċ Ċ private Ġval Ġcolumn Names Ġ= ĠarrayOf (" String ", Ġ" Integer ", Ġ" Boolean ") Ċ private Ġval Ġdata Ġ= ĠarrayOf ( ĊĠ ĠarrayOf (" aaa ", Ġ 1 2 , Ġtrue ), ĊĠ ĠarrayOf (" bbb ", Ġ 5 , Ġfalse ), ĊĠ ĠarrayOf (" CCC ", Ġ 9 2 , Ġtrue ), ĊĠ ĠarrayOf (" DDD ", Ġ 0 , Ġfalse ) Ċ ) Ċ private Ġval Ġmodel Ġ= Ġobject Ġ: ĠDefault TableModel ( data , Ġcolumn Names ) Ġ{ ĊĠ Ġoverride Ġfun Ġget Column Class ( column : ĠInt ) Ġ= ĠgetValue At ( 0 , Ġcolumn ). java Class Ċ } Ċ private Ġval Ġtable Ġ= Ġobject Ġ: ĠJ Table ( model ) Ġ{ ĊĠ Ġ@ Transient Ġprivate Ġvar Ġhighlighter : ĠHighlight Listener ? Ġ= Ġnull ĊĊĠ Ġoverride Ġfun Ġupdate UI () Ġ{ ĊĠĠĠ Ġadd Mouse Listener ( highlighter ) ĊĠĠĠ Ġadd Mouse Motion Listener ( highlighter ) ĊĠĠĠ ĠsetDefault Renderer ( Any :: class . java , Ġnull ) ĊĠĠĠ ĠsetDefault Renderer ( Number :: class . java , Ġnull ) ĊĠĠĠ ĠsetDefault Renderer ( java . lang . Boolean :: class . java , Ġnull ) ĊĠĠĠ Ġsuper . update UI () ĊĠĠĠ Ġval Ġhl Ġ= ĠHighlight Listener () ĊĠĠĠ Ġhighlighter Ġ= Ġhl ĊĠĠĠ Ġadd Mouse Listener ( hl ) ĊĠĠĠ Ġadd Mouse Motion Listener ( hl ) ĊĠĠĠ ĠsetDefault Renderer ( Any :: class . java , ĠR ollo ver Default TableCell Renderer ( hl )) ĊĠĠĠ ĠsetDefault Renderer ( Number :: class . java , ĠR ollo ver Number Renderer ( hl )) ĊĠĠĠ ĠsetDefault Renderer ( java . lang . Boolean :: class . java , ĠR ollo ver Boolean Renderer ( hl )) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġprepare Editor ( editor : ĠTable Cell Editor , Ġrow : ĠInt , Ġcolumn : ĠInt ) Ġ= ĊĠĠĠ Ġsuper . prepare Editor ( editor , Ġrow , Ġcolumn ). also Ġ{ ĊĠĠĠĠĠ Ġ( it Ġas ? ĠJ CheckBox )?. background Ġ= Ġget Selection Background () ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġmake UI (): ĠComponent Ġ{ ĊĠ Ġtable . auto Create Row Sorter Ġ= Ġtrue ĊĊĠ Ġval Ġsp Ġ= ĠJ Split Pane ( JS plit Pane . VERTICAL _ SPLIT ) ĊĠ Ġsp . top Component Ġ= ĠJ ScrollPane ( J Table ( model )) ĊĠ Ġsp . bottom Component Ġ= ĠJ ScrollPane ( table ) ĊĠ Ġsp . resize Weight Ġ= Ġ. 5 ĊĊĠ Ġreturn ĠJPanel ( Border Layout ()). also Ġ{ ĊĠĠĠ Ġit . add ( sp ) ĊĠĠĠ Ġit . preferred Size Ġ= ĠDimension ( 3 2 0 , Ġ 2 4 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠHighlight Listener Ġ: ĠMouse Adapter () Ġ{ ĊĠ Ġprivate Ġvar Ġview RowIndex Ġ= Ġ- 1 ĊĠ Ġprivate Ġvar Ġview Column Index Ġ= Ġ- 1 ĊĊĠ Ġfun Ġis Highlight ed Cell ( row : ĠInt , Ġcolumn : ĠInt ) Ġ= Ġview RowIndex Ġ== Ġrow Ġ&& Ġview Column Index Ġ== Ġcolumn ĊĊĠ Ġoverride Ġfun Ġmouse Moved ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠ Ġ( e . component Ġas ? ĠJ Table )?. also Ġ{ Ġtable Ġ-> ĊĠĠĠĠĠ Ġval Ġpt Ġ= Ġe . point ĊĠĠĠĠĠ Ġval Ġprev Row Ġ= Ġview RowIndex ĊĠĠĠĠĠ Ġval Ġprev Col Ġ= Ġview Column Index ĊĠĠĠĠĠ Ġview RowIndex Ġ= Ġtable . row At Point ( pt ) ĊĠĠĠĠĠ Ġview Column Index Ġ= Ġtable . column At Point ( pt ) ĊĠĠĠĠĠ Ġif Ġ( view RowIndex Ġ< Ġ 0 Ġ|| Ġview Column Index Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview RowIndex Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġview Column Index Ġ= Ġ- 1 ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġif Ġ( view RowIndex Ġ== Ġprev Row Ġ&& Ġview Column Index Ġ== Ġprev Col ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġtable . rep aint ( get Rep aint Rect ( table , Ġprev Row , Ġprev Col )) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Rep aint Rect ( table : ĠJ Table , Ġprev Row : ĠInt , Ġprev Col : ĠInt ): ĠRectangle Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( view RowIndex Ġ>= Ġ 0 Ġ&& Ġview Column Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġval Ġr Ġ= Ġtable . getCell Rect ( view RowIndex , Ġview Column Index , Ġfalse ) ĊĠĠĠĠĠ Ġif Ġ( prev Row Ġ>= Ġ 0 Ġ&& Ġprev Col Ġ>= Ġ 0 ) Ġr . union ( table . getCell Rect ( prev Row , Ġprev Col , Ġfalse )) Ġelse Ġr ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġtable . getCell Rect ( prev Row , Ġprev Col , Ġfalse ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġmouse Exit ed ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠ Ġ( e . component Ġas ? ĠJ Table )?. also Ġ{ Ġtable Ġ-> ĊĠĠĠĠĠ Ġif Ġ( view RowIndex Ġ>= Ġ 0 Ġ&& Ġview Column Index Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtable . rep aint ( table . getCell Rect ( view RowIndex , Ġview Column Index , Ġfalse )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġview RowIndex Ġ= Ġ- 1 ĊĠĠĠĠĠ Ġview Column Index Ġ= Ġ- 1 ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ private Ġopen Ġclass ĠR ollo ver Default TableCell Renderer ( ĊĠ Ġprivate Ġval Ġhighlighter : ĠHighlight Listener Ċ ) Ġ: ĠDefault TableCell Renderer () Ġ{ ĊĠ Ġoverride Ġfun Ġget TableCell Renderer Component ( ĊĠĠĠ Ġtable : ĠJ Table , ĊĠĠĠ Ġvalue : ĠAny ?, ĊĠĠĠ Ġis Selected : ĠBoolean , ĊĠĠĠ Ġhas Focus : ĠBoolean , ĊĠĠĠ Ġrow : ĠInt , ĊĠĠĠ Ġcolumn : ĠInt ĊĠ Ġ): ĠComponent Ġ{ ĊĠĠĠ Ġsuper . get TableCell Renderer Component ( table , Ġvalue , Ġis Selected , Ġhas Focus , Ġrow , Ġcolumn ) ĊĠĠĠ Ġval Ġstr Ġ= Ġvalue ?. toString () Ġ?: Ġ"" ĊĠĠĠ Ġval Ġis Highlight ed Cell Ġ= Ġhighlighter . is Highlight ed Cell ( row , Ġcolumn ) ĊĠĠĠ Ġforeground Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠ Ġis Selected Ġ-> Ġtable . selection Foreground ĊĠĠĠĠĠ Ġ! isSelected Ġ&& Ġis Highlight ed Cell Ġ-> ĠH IG HL IGHT ĊĠĠĠĠĠ Ġelse Ġ-> Ġtable . foreground ĊĠĠĠ Ġ} ĊĠĠĠ Ġbackground Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠ Ġis Selected Ġ&& Ġis Highlight ed Cell Ġ-> Ġtable . selection Background . dark er () ĊĠĠĠĠĠ Ġis Selected Ġ&& Ġ! is Highlight ed Cell Ġ-> Ġtable . selection Background ĊĠĠĠĠĠ Ġelse Ġ-> Ġtable . background ĊĠĠĠ Ġ} ĊĠĠĠ Ġtext Ġ= Ġif Ġ( is Highlight ed Cell ) Ġ"< html >< u >$ str " Ġelse Ġstr ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġval ĠH IG HL IGHT Ġ= ĠColor ( 2 5 5 , Ġ 1 5 0 , Ġ 5 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠR ollo ver Number Renderer ( highlighter : ĠHighlight Listener ) Ġ: ĠR ollo ver Default TableCell Renderer ( highlighter ) Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġhorizontal Alignment Ġ= ĠSw ing Constants . RIGHT ĊĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠR ollo ver Boolean Renderer ( private Ġval Ġhighlighter : ĠHighlight Listener ) Ġ: ĠJ CheckBox (), ĠTable Cell Renderer Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġhorizontal Alignment Ġ= ĠSw ing Constants . CENTER ĊĠĠĠ Ġis Border Paint ed Ġ= Ġtrue ĊĠĠĠ Ġis R ollo ver Enabled Ġ= Ġtrue ĊĠĠĠ Ġis Opaque Ġ= Ġtrue ĊĠĠĠ Ġborder Ġ= ĠBorder Factory . create Empty Border ( 1 , Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget TableCell Renderer Component ( ĊĠĠĠ Ġtable : ĠJ Table , ĊĠĠĠ Ġvalue : ĠAny ?, ĊĠĠĠ Ġis Selected : ĠBoolean , ĊĠĠĠ Ġhas Focus : ĠBoolean , ĊĠĠĠ Ġrow : ĠInt , ĊĠĠĠ Ġcolumn : ĠInt ĊĠ Ġ): ĠComponent Ġ{ ĊĠĠĠ ĠgetModel (). is R ollo ver Ġ= Ġhighlighter . is Highlight ed Cell ( row , Ġcolumn ) ĊĊĠĠĠ Ġif Ġ( isSelected ) Ġ{ ĊĠĠĠĠĠ Ġforeground Ġ= Ġtable . selection Foreground ĊĠĠĠĠĠ Ġsuper . setBackground ( table . selection Background ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġforeground Ġ= Ġtable . foreground ĊĠĠĠĠĠ Ġbackground Ġ= Ġtable . background ĊĠĠĠĠĠ Ġ// Ġset Background ( row Ġ% Ġ 2 Ġ== Ġ 0 Ġ? Ġtable . get Background () Ġ: ĠColor . WHITE ); Ġ// ĠNim bus ĊĠĠĠ Ġ} ĊĠĠĠ ĠsetSelected ( value Ġ== Ġtrue ) ĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . Ġ---- > ĊĠ Ġoverride Ġfun Ġis Opaque (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġo Ġ= ĠSw ing Utilities . get Ancestor Of Class ( J Table :: class . java , Ġthis ) ĊĠĠĠ Ġreturn Ġ( o Ġas ? ĠJ Table )?. let Ġ{ Ġtable Ġ-> ĊĠĠĠĠĠ Ġval Ġback Ġ= Ġbackground ĊĠĠĠĠĠ Ġval Ġcolor Match Ġ= Ġback Ġ!= Ġnull Ġ&& Ġback Ġ== Ġtable . background Ġ&& Ġtable . is Opaque ĊĠĠĠĠĠ Ġ! color Match Ġ&& Ġsuper . is Opaque () ĊĠĠĠ Ġ} Ġ?: Ġsuper . is Opaque () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġfire Property Change ( propertyName : ĠString , ĠoldValue : ĠAny ?, ĠnewValue : ĠAny ?) Ġ{ ĊĠĠĠ Ġ// ĠSystem . out . println ( propertyName ); ĊĠĠĠ Ġ// Ġif Ġ( propertyName Ġ== Ġ" border " Ġ|| ĊĠĠĠ Ġ// ĠĠĠĠ Ġ(( propertyName Ġ== Ġ" font " Ġ|| ĠpropertyName Ġ== Ġ" foreground ") Ġ&& ĠoldValue Ġ!= ĠnewValue )) Ġ{ ĊĠĠĠ Ġ// ĠĠ Ġsuper . fire Property Change ( propertyName , ĠoldValue , ĠnewValue ); ĊĠĠĠ Ġ// Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġfire Property Change ( propertyName : ĠString , ĠoldValue : ĠBoolean , ĠnewValue : ĠBoolean ) Ġ{ ĊĠĠĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrep aint ( tm : ĠLong , Ġx : ĠInt , Ġy : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrep aint ( r : ĠRectangle ) Ġ{ ĊĠĠĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrep aint () Ġ{ ĊĠĠĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġinvalidate () Ġ{ ĊĠĠĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġvalidate () Ġ{ ĊĠĠĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġre validate () Ġ{ ĊĠĠĠ Ġ// ĠOver ridden Ġfor Ġperformance Ġreasons . ĊĠ Ġ} ĊĠ Ġ// Ġ< ---- ĠOver ridden Ġfor Ġperformance Ġreasons . Ċ } Ċ Ċ 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 ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ