package Ġexample Ċ Ċ import Ġjava . awt .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . ParseException Ċ import Ġjavax . swing .* Ġ// Ġk tl int - disable Ġno - wildcard - imports Ċ import Ġjavax . swing . J Spinner . Default Editor Ċ import Ġjavax . swing . event . Document Event Ċ import Ġjavax . swing . event . Document Listener Ċ import Ġjavax . swing . text . Default Formatter Ċ import Ġjavax . swing . text . Default Formatter Factory Ċ import Ġjavax . swing . text . Number Formatter Ċ Ċ fun Ġmake UI (): ĠComponent Ġ{ ĊĠ Ġval Ġspinner Ġ= ĠJ Spinner ( make Spinner Number Model ()) ĊĠ Ġ( spinner . editor Ġas ? ĠDefault Editor )?. also Ġ{ ĊĠĠĠ Ġval Ġformatter Ġ= Ġit . textField . formatter ĊĠĠĠ Ġif Ġ( formatter Ġis ĠDefault Formatter ) Ġ{ ĊĠĠĠĠĠ Ġformatter . allows Invalid Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĠ Ġreturn ĠJPanel ( GridLayout ( 3 , Ġ 1 )). also Ġ{ ĊĠĠĠ Ġit . add ( make Title d Panel (" Default ", ĠJ Spinner ( make Spinner Number Model ()))) ĊĠĠĠ Ġit . add ( make Title d Panel (" Number Formatter # set Allow s Invalid ( false )", Ġspinner )) ĊĠĠĠ Ġit . add ( make Title d Panel (" BackgroundColor ", ĠWarning Spinner ( make Spinner Number Model ()))) ĊĠĠĠ Ġit . border Ġ= ĠBorder Factory . create Empty Border ( 1 0 , Ġ 5 , Ġ 1 0 , Ġ 5 ) ĊĠĠĠ Ġit . preferred Size Ġ= ĠDimension ( 3 2 0 , Ġ 2 4 0 ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġmake Spinner Number Model () Ġ= ĊĠ ĠSp inner Number Model ( 1 0 . to Long (), Ġ 0 . to Long (), Ġ 9 9 _ 9 9 9 . to Long (), Ġ 1 . to Long ()) Ċ Ċ private Ġfun Ġmake Title d Panel ( title : ĠString , Ġcmp : ĠComponent ): ĠComponent Ġ{ ĊĠ Ġval Ġp Ġ= ĠJPanel ( Grid BagLayout ()) ĊĠ Ġp . border Ġ= ĠBorder Factory . create Title d Border ( title ) ĊĠ Ġval Ġc Ġ= ĠGridBagConstraints () ĊĠ Ġc . weight x Ġ= Ġ 1 . 0 ĊĠ Ġc . fill Ġ= ĠGridBagConstraints . HORIZONTAL ĊĠ Ġc . in sets Ġ= ĠIn sets ( 5 , Ġ 5 , Ġ 5 , Ġ 5 ) ĊĠ Ġp . add ( cmp , Ġc ) ĊĠ Ġreturn Ġp Ċ } Ċ Ċ private Ġclass ĠWarning Spinner ( model : ĠSp inner Number Model ) Ġ: ĠJ Spinner ( model ) Ġ{ ĊĠ Ġinit Ġ{ ĊĠĠĠ Ġ( editor Ġas ? ĠDefault Editor )?. also Ġ{ ĊĠĠĠĠĠ Ġval Ġf tf Ġ= Ġit . textField ĊĠĠĠĠĠ Ġf tf . formatter Factory Ġ= Ġmake FF actory ( model ) ĊĠĠĠĠĠ Ġval Ġdl Ġ= Ġobject Ġ: ĠDocument Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġerror Background Ġ= ĠColor ( 0 xFF _ C 8 _ C 8 ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġchanged Update ( e : ĠDocument Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġupdate Edit Valid () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinsert Update ( e : ĠDocument Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġupdate Edit Valid () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġremove Update ( e : ĠDocument Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġupdate Edit Valid () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġupdate Edit Valid () Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠEvent Queue . invoke Later Ġ{ Ġf tf . background Ġ= Ġif Ġ( ft f . is Edit Valid ) ĠColor . WHITE Ġelse Ġerror Background Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġf tf . document . add Document Listener ( dl ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġmake FF actory ( m : ĠSp inner Number Model ): ĠDefault Formatter Factory Ġ{ ĊĠĠĠĠĠ Ġval Ġformat Ġ= ĠDecimal Format (" #### 0 ") ĊĠĠĠĠĠ Ġval Ġedit Formatter Ġ= Ġobject Ġ: ĠNumber Formatter ( format ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Throws ( ParseException :: class ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstring To Value ( text : ĠString ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext . to Long () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġval Ġlv Ġ= Ġformat . parse ( text ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( lv Ġis ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lv Ġ! in Ġm . minimum .. m . maximum ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠParseException (" out Ġof Ġbounds ", Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlv ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠParseException (" not ĠLong ", Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġedit Formatter . value Class Ġ= ĠLong :: class . java ĊĠĠĠĠĠ Ġval Ġdisplay Formatter Ġ= ĠNumber Formatter ( format ) ĊĠĠĠĠĠ Ġreturn ĠDefault Formatter Factory ( display Formatter , Ġdisplay Formatter , Ġedit Formatter ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ 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 ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ