package Ġcom . ch imer apps . discovery . ui Ċ Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Container Ċ import Ġjavax . swing . Spring Ċ import Ġjavax . swing . Spring Layout Ċ Ċ /** Ċ Ġ* ĠA Ġ 1 . 4 Ġfile Ġthat Ġprovides Ġutility Ġmethods Ġfor Ċ Ġ* Ġcreating Ġform - Ġor Ġgrid - style Ġlayouts Ġwith ĠSpring Layout . Ċ Ġ* ĠThese Ġutilities Ġare Ġused Ġby Ġseveral Ġprograms , Ġsuch Ġas Ċ Ġ* ĠSpring Box Ġand ĠSpring Compact Grid . Ċ Ġ*/ Ċ object ĠSpring Utilities Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠA Ġdebugging Ġutility Ġthat Ġprints Ġto Ġstdout Ġthe Ġcomponent 's ĊĠĠĠĠ Ġ* Ġminimum , Ġpreferred , Ġand Ġmaximum Ġsizes . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġprint Sizes ( c : ĠComponent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" minimum Size Ġ= Ġ" Ġ+ Ġc . minimum Size ) ĊĠĠĠĠĠĠĠ Ġprintln (" preferred Size Ġ= Ġ" Ġ+ Ġc . preferred Size ) ĊĠĠĠĠĠĠĠ Ġprintln (" maximum Size Ġ= Ġ" Ġ+ Ġc . maximum Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAlign s Ġthe Ġfirst Ġ` rows ` Ġ* Ġ` cols ` ĊĠĠĠĠ Ġ* Ġcomponents Ġof Ġ` parent ` Ġin ĊĠĠĠĠ Ġ* Ġa Ġgrid . ĠEach Ġcomponent Ġis Ġas Ġbig Ġas Ġthe Ġmaximum ĊĠĠĠĠ Ġ* Ġpreferred Ġwidth Ġand Ġheight Ġof Ġthe Ġcomponents . ĊĠĠĠĠ Ġ* ĠThe Ġparent Ġis Ġmade Ġjust Ġbig Ġenough Ġto Ġfit Ġthem Ġall . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrows Ġnumber Ġof Ġrows ĊĠĠĠĠ Ġ* Ġ@ param Ġcols Ġnumber Ġof Ġcolumns ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial X Ġx Ġlocation Ġto Ġstart Ġthe Ġgrid Ġat ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Y Ġy Ġlocation Ġto Ġstart Ġthe Ġgrid Ġat ĊĠĠĠĠ Ġ* Ġ@ param Ġx Pad Ġx Ġpadding Ġbetween Ġcells ĊĠĠĠĠ Ġ* Ġ@ param Ġy Pad Ġy Ġpadding Ġbetween Ġcells ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmake Grid ( parent : ĠContainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows : ĠInt , Ġcols : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial X : ĠInt , Ġinitial Y : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pad : ĠInt , Ġy Pad : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout : ĠSpring Layout ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Ġ= Ġparent . layout Ġas ĠSpring Layout ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" The Ġfirst Ġargument Ġto Ġmake Grid Ġmust Ġuse ĠSpring Layout .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġx Pad Spring Ġ= ĠSpring . constant ( x Pad ) ĊĠĠĠĠĠĠĠ Ġval Ġy Pad Spring Ġ= ĠSpring . constant ( y Pad ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial X Spring Ġ= ĠSpring . constant ( initial X ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial Y Spring Ġ= ĠSpring . constant ( initial Y ) ĊĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġrows Ġ* Ġcols ĊĊĠĠĠĠĠĠĠ Ġ// Calculate ĠSpr ings Ġthat Ġare Ġthe Ġmax Ġof Ġthe Ġwidth / height Ġso Ġthat Ġall ĊĠĠĠĠĠĠĠ Ġ// cells Ġhave Ġthe Ġsame Ġsize . ĊĠĠĠĠĠĠĠ Ġvar ĠmaxWidth Spring Ġ= Ġlayout . get Constraints ( parent . getComponent ( 0 )). width ĊĠĠĠĠĠĠĠ Ġvar ĠmaxHeight Spring Ġ= Ġlayout . get Constraints ( parent . getComponent ( 0 )). height ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcons Ġ= Ġlayout . get Constraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . getComponent ( i )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxWidth Spring Ġ= ĠSpring . max ( maxWidth Spring , Ġcons . width ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxHeight Spring Ġ= ĠSpring . max ( max Height Spring , Ġcons . height ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Apply Ġthe Ġnew Ġwidth / height ĠSpring . ĠThis Ġforces Ġall Ġthe ĊĠĠĠĠĠĠĠ Ġ// components Ġto Ġhave Ġthe Ġsame Ġsize . ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcons Ġ= Ġlayout . get Constraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . getComponent ( i )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcons . width Ġ= ĠmaxWidth Spring ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcons . height Ġ= ĠmaxHeight Spring ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Then Ġadjust Ġthe Ġx / y Ġconstraints Ġof Ġall Ġthe Ġcells Ġso Ġthat Ġthey ĊĠĠĠĠĠĠĠ Ġ// are Ġaligned Ġin Ġa Ġgrid . ĊĠĠĠĠĠĠĠ Ġvar Ġlast Cons : ĠSpring Layout . Constraints ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġlast Row Cons : ĠSpring Layout . Constraints ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcons Ġ= Ġlayout . get Constraints ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . getComponent ( i )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ% Ġcols Ġ== Ġ 0 ) Ġ{ Ġ// start Ġof Ġnew Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Row Cons Ġ= Ġlast Cons ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcons . x Ġ= Ġinitial X Spring ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// x Ġposition Ġdepends Ġon Ġprevious Ġcomponent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcons . x Ġ= ĠSpring . sum ( last Cons !!. get Constraint ( Spring Layout . EAST ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pad Spring ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ/ Ġcols Ġ== Ġ 0 ) Ġ{ Ġ// first Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcons . y Ġ= Ġinitial Y Spring ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// y Ġposition Ġdepends Ġon Ġprevious Ġrow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcons . y Ġ= ĠSpring . sum ( last Row Cons !!. get Constraint ( Spring Layout . SO UTH ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pad Spring ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Cons Ġ= Ġcons ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġparent 's Ġsize . ĊĠĠĠĠĠĠĠ Ġval Ġp Cons Ġ= Ġlayout . get Constraints ( parent ) ĊĠĠĠĠĠĠĠ Ġp Cons . set Constraint ( Spring Layout . SO UTH , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpring . sum ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpring . constant ( y Pad ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Cons !!. get Constraint ( Spring Layout . SO UTH ))) ĊĠĠĠĠĠĠĠ Ġp Cons . set Constraint ( Spring Layout . EAST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpring . sum ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpring . constant ( x Pad ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Cons . get Constraint ( Spring Layout . EAST ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĠUsed Ġby Ġmake Compact Grid . Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Constraints For Cell ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrow : ĠInt , Ġcol : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent : ĠContainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcols : ĠInt ): ĠSpring Layout . Constraints Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġparent . layout Ġas ĠSpring Layout ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġparent . getComponent ( row Ġ* Ġcols Ġ+ Ġcol ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout . get Constraints ( c ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAlign s Ġthe Ġfirst Ġ` rows ` Ġ* Ġ` cols ` ĊĠĠĠĠ Ġ* Ġcomponents Ġof Ġ` parent ` Ġin ĊĠĠĠĠ Ġ* Ġa Ġgrid . ĠEach Ġcomponent Ġin Ġa Ġcolumn Ġis Ġas Ġwide Ġas Ġthe Ġmaximum ĊĠĠĠĠ Ġ* Ġpreferred Ġwidth Ġof Ġthe Ġcomponents Ġin Ġthat Ġcolumn ; ĊĠĠĠĠ Ġ* Ġheight Ġis Ġsimilar ly Ġdetermined Ġfor Ġeach Ġrow . ĊĠĠĠĠ Ġ* ĠThe Ġparent Ġis Ġmade Ġjust Ġbig Ġenough Ġto Ġfit Ġthem Ġall . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrows Ġnumber Ġof Ġrows ĊĠĠĠĠ Ġ* Ġ@ param Ġcols Ġnumber Ġof Ġcolumns ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial X Ġx Ġlocation Ġto Ġstart Ġthe Ġgrid Ġat ĊĠĠĠĠ Ġ* Ġ@ param Ġinitial Y Ġy Ġlocation Ġto Ġstart Ġthe Ġgrid Ġat ĊĠĠĠĠ Ġ* Ġ@ param Ġx Pad Ġx Ġpadding Ġbetween Ġcells ĊĠĠĠĠ Ġ* Ġ@ param Ġy Pad Ġy Ġpadding Ġbetween Ġcells ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġmake Compact Grid ( parent : ĠContainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrows : ĠInt , Ġcols : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial X : ĠInt , Ġinitial Y : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pad : ĠInt , Ġy Pad : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout : ĠSpring Layout ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Ġ= Ġparent . layout Ġas ĠSpring Layout ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exc : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" The Ġfirst Ġargument Ġto Ġmake Compact Grid Ġmust Ġuse ĠSpring Layout .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Align Ġall Ġcells Ġin Ġeach Ġcolumn Ġand Ġmake Ġthem Ġthe Ġsame Ġwidth . ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= ĠSpring . constant ( initial X ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 0 Ġuntil Ġcols ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth Ġ= ĠSpring . constant ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġ 0 Ġuntil Ġrows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= ĠSpring . max ( width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Constraints For Cell ( r , Ġc , Ġparent , Ġcols ). width ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġ 0 Ġuntil Ġrows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= Ġget Constraints For Cell ( r , Ġc , Ġparent , Ġcols ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . x Ġ= Ġx ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= ĠSpring . sum ( x , ĠSpring . sum ( width , ĠSpring . constant ( x Pad ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Align Ġall Ġcells Ġin Ġeach Ġrow Ġand Ġmake Ġthem Ġthe Ġsame Ġheight . ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= ĠSpring . constant ( initial Y ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( r Ġin Ġ 0 Ġuntil Ġrows ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= ĠSpring . constant ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 0 Ġuntil Ġcols ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= ĠSpring . max ( height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Constraints For Cell ( r , Ġc , Ġparent , Ġcols ). height ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġ 0 Ġuntil Ġcols ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= Ġget Constraints For Cell ( r , Ġc , Ġparent , Ġcols ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . y Ġ= Ġy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . height Ġ= Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= ĠSpring . sum ( y , ĠSpring . sum ( height , ĠSpring . constant ( y Pad ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġparent 's Ġsize . ĊĠĠĠĠĠĠĠ Ġval Ġp Cons Ġ= Ġlayout . get Constraints ( parent ) ĊĠĠĠĠĠĠĠ Ġp Cons . set Constraint ( Spring Layout . SO UTH , Ġy ) ĊĠĠĠĠĠĠĠ Ġp Cons . set Constraint ( Spring Layout . EAST , Ġx ) ĊĠĠĠ Ġ} Ċ }