| <html xmlns:v="urn:schemas-microsoft-com:vml" |
| xmlns:o="urn:schemas-microsoft-com:office:office" |
| xmlns:w="urn:schemas-microsoft-com:office:word" |
| xmlns="http://www.w3.org/TR/REC-html40"> |
| |
| <head> |
| <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> |
| <meta name=ProgId content=Word.Document> |
| <meta name=Generator content="Microsoft Word 9"> |
| <meta name=Originator content="Microsoft Word 9"> |
| <link rel=File-List href="./Understanding%20Layouts_files/filelist.xml"> |
| <link rel=OLE-Object-Data href="./Understanding%20Layouts_files/oledata.mso"> |
| <!--[if !mso]> |
| <style> |
| v\:* {behavior:url(#default#VML);} |
| o\:* {behavior:url(#default#VML);} |
| w\:* {behavior:url(#default#VML);} |
| .shape {behavior:url(#default#VML);} |
| </style> |
| <![endif]--> |
| <title>Understanding Layouts in SWT</title> |
| <!--[if gte mso 9]><xml> |
| <o:DocumentProperties> |
| <o:Author>OTI EMPLOYEE</o:Author> |
| <o:LastAuthor>Dave Thomson</o:LastAuthor> |
| <o:Revision>19</o:Revision> |
| <o:TotalTime>4133</o:TotalTime> |
| <o:LastPrinted>2001-03-07T20:56:00Z</o:LastPrinted> |
| <o:Created>2001-06-04T02:06:00Z</o:Created> |
| <o:LastSaved>2001-06-04T16:29:00Z</o:LastSaved> |
| <o:Pages>27</o:Pages> |
| <o:Words>5576</o:Words> |
| <o:Characters>31787</o:Characters> |
| <o:Company>OBJECT TECHNOLOGY INTL</o:Company> |
| <o:Lines>264</o:Lines> |
| <o:Paragraphs>63</o:Paragraphs> |
| <o:CharactersWithSpaces>39036</o:CharactersWithSpaces> |
| <o:Version>9.2720</o:Version> |
| </o:DocumentProperties> |
| </xml><![endif]--><!--[if gte mso 9]><xml> |
| <w:WordDocument> |
| <w:ActiveWritingStyle Lang="EN-US" VendorID="8" DLLVersion="513" NLCheck="0">1</w:ActiveWritingStyle> |
| <w:DoNotHyphenateCaps/> |
| <w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery> |
| <w:DisplayVerticalDrawingGridEvery>0</w:DisplayVerticalDrawingGridEvery> |
| <w:UseMarginsForDrawingGridOrigin/> |
| <w:Compatibility> |
| <w:UsePrinterMetrics/> |
| <w:WW6BorderRules/> |
| <w:FootnoteLayoutLikeWW8/> |
| <w:ShapeLayoutLikeWW8/> |
| <w:AlignTablesRowByRow/> |
| <w:ForgetLastTabAlignment/> |
| <w:LayoutRawTableWidth/> |
| <w:LayoutTableRowsApart/> |
| </w:Compatibility> |
| </w:WordDocument> |
| </xml><![endif]--> |
| <link rel=Stylesheet type="text/css" media=all |
| href="Understanding%20Layouts_files\default_style.css"> |
| <style> |
| <!-- |
| /* Style Definitions */ |
| p.MsoNormal, li.MsoNormal, div.MsoNormal |
| {mso-style-parent:""; |
| margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| h1 |
| {mso-style-next:Normal; |
| margin-top:12.0pt; |
| margin-right:0in; |
| margin-bottom:3.0pt; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| page-break-after:avoid; |
| mso-outline-level:1; |
| font-size:21.0pt; |
| font-family:Arial; |
| color:windowtext; |
| mso-font-kerning:14.0pt; |
| font-weight:bold;} |
| h2 |
| {mso-style-next:Normal; |
| margin-top:12.0pt; |
| margin-right:0in; |
| margin-bottom:6.0pt; |
| margin-left:0in; |
| mso-line-height-alt:10.5pt; |
| mso-pagination:widow-orphan; |
| page-break-after:avoid; |
| mso-outline-level:2; |
| font-size:18.0pt; |
| font-family:Arial; |
| color:windowtext; |
| font-weight:bold;} |
| h3 |
| {mso-style-next:Normal; |
| margin-top:12.0pt; |
| margin-right:0in; |
| margin-bottom:3.0pt; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| page-break-after:avoid; |
| mso-outline-level:3; |
| font-size:14.0pt; |
| font-family:Arial; |
| color:windowtext; |
| font-weight:bold;} |
| h4 |
| {mso-style-next:Normal; |
| margin-top:12.0pt; |
| margin-right:0in; |
| margin-bottom:3.0pt; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| page-break-after:avoid; |
| mso-outline-level:4; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| color:windowtext; |
| font-weight:bold; |
| mso-bidi-font-weight:normal;} |
| h5 |
| {mso-style-next:Normal; |
| margin:0in; |
| margin-bottom:.0001pt; |
| text-align:center; |
| mso-pagination:widow-orphan; |
| page-break-after:avoid; |
| mso-outline-level:5; |
| mso-list:skip; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| color:windowtext; |
| font-weight:bold; |
| mso-bidi-font-weight:normal;} |
| p.MsoToc1, li.MsoToc1, div.MsoToc1 |
| {mso-style-next:Normal; |
| margin-top:.25in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext; |
| text-transform:uppercase; |
| font-weight:bold; |
| mso-bidi-font-weight:normal;} |
| p.MsoToc2, li.MsoToc2, div.MsoToc2 |
| {mso-style-next:Normal; |
| margin-top:12.0pt; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext; |
| font-weight:bold; |
| mso-bidi-font-weight:normal;} |
| p.MsoToc3, li.MsoToc3, div.MsoToc3 |
| {mso-style-next:Normal; |
| margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:10.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoToc4, li.MsoToc4, div.MsoToc4 |
| {mso-style-next:Normal; |
| margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:20.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoToc5, li.MsoToc5, div.MsoToc5 |
| {mso-style-next:Normal; |
| margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:30.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoToc6, li.MsoToc6, div.MsoToc6 |
| {mso-style-next:Normal; |
| margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:40.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoToc7, li.MsoToc7, div.MsoToc7 |
| {mso-style-next:Normal; |
| margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:50.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoToc8, li.MsoToc8, div.MsoToc8 |
| {mso-style-next:Normal; |
| margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:60.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoToc9, li.MsoToc9, div.MsoToc9 |
| {mso-style-next:Normal; |
| margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:70.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoHeader, li.MsoHeader, div.MsoHeader |
| {margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:center 3.0in right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoFooter, li.MsoFooter, div.MsoFooter |
| {margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:center 3.0in right 6.0in; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:windowtext;} |
| p.MsoBodyText, li.MsoBodyText, div.MsoBodyText |
| {margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| font-size:12.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman"; |
| color:red;} |
| p.MsoBodyText2, li.MsoBodyText2, div.MsoBodyText2 |
| {margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:.25in .5in .75in 1.0in 1.25in 1.5in; |
| layout-grid-mode:char; |
| font-size:9.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Courier New"; |
| mso-fareast-font-family:"Times New Roman"; |
| mso-bidi-font-family:"Times New Roman"; |
| color:black;} |
| a:link, span.MsoHyperlink |
| {color:blue; |
| text-decoration:underline; |
| text-underline:single;} |
| a:visited, span.MsoHyperlinkFollowed |
| {color:purple; |
| text-decoration:underline; |
| text-underline:single;} |
| strong |
| {mso-bidi-font-weight:normal;} |
| em |
| {mso-bidi-font-style:normal;} |
| p |
| {margin-top:5.0pt; |
| margin-right:0in; |
| margin-bottom:5.0pt; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| font-size:10.0pt; |
| font-family:Arial; |
| mso-fareast-font-family:"Times New Roman"; |
| color:black;} |
| code |
| {mso-ansi-font-size:8.5pt; |
| mso-bidi-font-size:8.5pt; |
| mso-ascii-font-family:"Courier New"; |
| mso-fareast-font-family:"Times New Roman"; |
| mso-hansi-font-family:"Courier New"; |
| mso-bidi-font-family:"Courier New";} |
| pre |
| {margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; |
| font-size:10.0pt; |
| font-family:"Courier New"; |
| mso-fareast-font-family:"Courier New"; |
| color:windowtext;} |
| p.Code, li.Code, div.Code |
| {mso-style-name:Code; |
| margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:.25in .5in .75in 1.0in 1.25in 1.5in 1.75in 2.0in 2.25in 2.5in 2.75in 3.0in 3.25in 3.5in 3.75in 4.0in 4.25in 4.5in 4.75in 5.0in 5.25in 5.5in 5.75in; |
| layout-grid-mode:char; |
| font-size:9.0pt; |
| mso-bidi-font-size:10.0pt; |
| font-family:"Courier New"; |
| mso-fareast-font-family:"Times New Roman"; |
| mso-bidi-font-family:"Times New Roman"; |
| color:windowtext;} |
| @page Section1 |
| {size:8.5in 11.0in; |
| margin:1.0in 1.25in 1.0in 1.25in; |
| mso-header-margin:.5in; |
| mso-footer-margin:.5in; |
| mso-title-page:yes; |
| mso-even-footer:url("./Understanding%20Layouts_files/header.htm") ef1; |
| mso-footer:url("./Understanding%20Layouts_files/header.htm") f1; |
| mso-paper-source:0;} |
| div.Section1 |
| {page:Section1;} |
| /* List Definitions */ |
| @list l0 |
| {mso-list-id:-2; |
| mso-list-type:simple; |
| mso-list-template-ids:-1;} |
| @list l0:level1 |
| {mso-level-start-at:0; |
| mso-level-text:*; |
| mso-level-tab-stop:none; |
| mso-level-number-position:left; |
| margin-left:0in; |
| text-indent:0in;} |
| @list l1 |
| {mso-list-id:346905124; |
| mso-list-type:hybrid; |
| mso-list-template-ids:-640262218 1992605384 -1164151212 196216344 207768582 -465804808 -978527370 -445462926 -1247488604 2084046000;} |
| @list l1:level1 |
| {mso-level-number-format:bullet; |
| mso-level-text:\F0B7; |
| mso-level-tab-stop:.5in; |
| mso-level-number-position:left; |
| text-indent:-.25in; |
| font-family:Symbol;} |
| @list l2 |
| {mso-list-id:400176146; |
| mso-list-type:hybrid; |
| mso-list-template-ids:-1883319026 -1449079578 1246159260 -1325105612 57442112 507803072 -1579807020 720565274 476881622 -2006260142;} |
| @list l2:level1 |
| {mso-level-number-format:bullet; |
| mso-level-text:\F0B7; |
| mso-level-tab-stop:.75in; |
| mso-level-number-position:left; |
| margin-left:.75in; |
| text-indent:-.25in; |
| font-family:Symbol;} |
| @list l3 |
| {mso-list-id:605164106; |
| mso-list-type:hybrid; |
| mso-list-template-ids:832965996 1120049284 -1716494676 1491470454 296799966 -1824480168 1890771820 895397522 -1654206448 1985668936;} |
| @list l3:level1 |
| {mso-level-number-format:bullet; |
| mso-level-text:\F0B7; |
| mso-level-tab-stop:.75in; |
| mso-level-number-position:left; |
| margin-left:.75in; |
| text-indent:-.25in; |
| font-family:Symbol;} |
| @list l4 |
| {mso-list-id:1030568495; |
| mso-list-type:hybrid; |
| mso-list-template-ids:-170775920 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} |
| @list l4:level1 |
| {mso-level-number-format:bullet; |
| mso-level-text:\F0B7; |
| mso-level-tab-stop:26.65pt; |
| mso-level-number-position:left; |
| margin-left:26.65pt; |
| text-indent:-.25in; |
| font-family:Symbol;} |
| @list l5 |
| {mso-list-id:1666586583; |
| mso-list-type:hybrid; |
| mso-list-template-ids:-170775920 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} |
| @list l5:level1 |
| {mso-level-number-format:bullet; |
| mso-level-text:\F0B7; |
| mso-level-tab-stop:26.65pt; |
| mso-level-number-position:left; |
| margin-left:26.65pt; |
| text-indent:-.25in; |
| font-family:Symbol;} |
| @list l0:level1 lfo2 |
| {mso-level-number-format:bullet; |
| mso-level-numbering:continue; |
| mso-level-text:\F0B7; |
| mso-level-tab-stop:none; |
| mso-level-number-position:left; |
| mso-level-legacy:yes; |
| mso-level-legacy-indent:.25in; |
| mso-level-legacy-space:0in; |
| margin-left:.25in; |
| text-indent:-.25in; |
| font-family:Symbol;} |
| ol |
| {margin-bottom:0in;} |
| ul |
| {margin-bottom:0in;} |
| --> |
| </style> |
| <!--[if gte mso 9]><xml> |
| <o:shapedefaults v:ext="edit" spidmax="1102"/> |
| </xml><![endif]--><!--[if gte mso 9]><xml> |
| <o:shapelayout v:ext="edit"> |
| <o:idmap v:ext="edit" data="1"/> |
| </o:shapelayout></xml><![endif]--> |
| </head> |
| |
| <body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'> |
| |
| <div class=Section1> |
| |
| <p class=MsoNormal align=right style='margin-top:14.2pt;margin-right:0in; |
| margin-bottom:0in;margin-left:17.0pt;margin-bottom:.0001pt;text-align:right'><a |
| name="_Toc496069418"></a><a name="_Toc509864523"><span style='mso-bookmark: |
| _Toc496069418'><span style='font-size:8.0pt;mso-bidi-font-size:10.0pt'>Copyright |
| © 2001 Object Technology International, Inc.<o:p></o:p></span></span></a></p> |
| |
| <table border=0 cellspacing=0 cellpadding=0 width="100%" style='width:100.0%; |
| mso-cellspacing:0in;margin-left:17.0pt;mso-padding-alt:1.5pt 1.5pt 1.5pt 1.5pt'> |
| <tr> |
| <td valign=top style='background:#0080C0;padding:1.5pt 1.5pt 1.5pt 1.5pt'> |
| <p class=MsoNormal><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'><b><span style='font-family:Arial; |
| color:white'> Eclipse Corner Article</span></b></span></span><span |
| style='mso-bookmark:_Toc509864523'><span style='mso-bookmark:_Toc496069418'><span |
| style='mso-bidi-font-size:12.0pt'><o:p></o:p></span></span></span></p> |
| </td> |
| <span style='mso-bookmark:_Toc509864523'><span style='mso-bookmark:_Toc496069418'></span></span> |
| </tr> |
| </table> |
| |
| <h1 style='margin-left:17.0pt'><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'><img width=120 height=86 id="_x0000_i1060" |
| src="../images/Idea.jpg" align=CENTER></span></span><span |
| style='mso-bookmark:_Toc509864523'><span style='mso-bookmark:_Toc496069418'><span |
| style='font-size:8.0pt;mso-bidi-font-size:10.0pt'><o:p></o:p></span></span></span></h1> |
| |
| <h1 align=center style='margin-left:17.0pt;text-align:center'><span |
| style='mso-bookmark:_Toc509864523'><span style='mso-bookmark:_Toc496069418'>Understanding |
| Layouts in SWT</span></span></h1> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;text-indent:.5in'><span |
| style='mso-bookmark:_Toc509864523'><span style='mso-bookmark:_Toc496069418'><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></span></span></p> |
| |
| <p class=MsoNormal style='margin-top:0in;margin-right:.5in;margin-bottom:0in; |
| margin-left:53.0pt;margin-bottom:.0001pt'><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'><b>Summary</b> <br> |
| When writing applications in SWT, you may need to use <i style='mso-bidi-font-style: |
| normal'>layouts</i> to give your windows a specific look. A layout controls the |
| position and size of children in a <i style='mso-bidi-font-style:normal'>Composite</i>. |
| Layout classes are subclasses of the abstract class <i style='mso-bidi-font-style: |
| normal'>Layout</i>. This article shows you how to work with standard layouts, |
| and write your own custom layout class.</span></span><span style='mso-bookmark: |
| _Toc509864523'><span style='mso-bookmark:_Toc496069418'><span lang=EN-CA |
| style='mso-bidi-font-size:12.0pt;mso-ansi-language:EN-CA'><o:p></o:p></span></span></span></p> |
| |
| <p class=MsoNormal style='margin-top:0in;margin-right:.5in;margin-bottom:0in; |
| margin-left:53.0pt;margin-bottom:.0001pt'><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'><b><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></span></span></p> |
| |
| <p class=MsoNormal style='margin-top:0in;margin-right:.5in;margin-bottom:0in; |
| margin-left:53.0pt;margin-bottom:.0001pt'><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'><b>By Carolyn MacLeod, OTI<o:p></o:p></b></span></span></p> |
| |
| <p class=MsoNormal style='margin-top:0in;margin-right:.5in;margin-bottom:0in; |
| margin-left:53.0pt;margin-bottom:.0001pt'><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'><span style='font-size:10.0pt'>March 22, |
| 2001<o:p></o:p></span></span></span></p> |
| |
| <p class=MsoNormal style='margin-top:0in;margin-right:.5in;margin-bottom:0in; |
| margin-left:53.0pt;margin-bottom:.0001pt'><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'><b><span style='font-size:8.0pt;mso-bidi-font-size: |
| 10.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></b></span></span></p> |
| |
| |
| <div class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><span |
| style='mso-bookmark:_Toc509864523'><span style='mso-bookmark:_Toc496069418'> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </span></span></div> |
| |
| <b style='mso-bidi-font-weight:normal'><span style='font-size:21.0pt; |
| font-family:Arial;mso-fareast-font-family:"Times New Roman";mso-font-kerning: |
| 14.0pt;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language: |
| AR-SA'><br clear=all style='page-break-before:always'> |
| </span></b> |
| |
| <h1 style='margin-left:17.0pt'><span style='mso-bookmark:_Toc509864523'><span |
| style='mso-bookmark:_Toc496069418'>Layouts</span></span></h1> |
| |
| <h2 style='margin-left:17.0pt'><a name="_Toc496069419"></a><a |
| name="_Toc496069776"></a><a name="_Toc509864524"><span style='mso-bookmark: |
| _Toc496069776'><span style='mso-bookmark:_Toc496069419'>Overview</span></span></a></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>When writing |
| applications in SWT, you may need to use <i style='mso-bidi-font-style:normal'>layouts</i> |
| to give your windows a specific look. A layout controls the position and size |
| of children in a <i style='mso-bidi-font-style:normal'>Composite</i>. Layout |
| classes are subclasses of the abstract class <i style='mso-bidi-font-style: |
| normal'>Layout</i>. SWT provides several standard layout classes, and you can |
| write custom layout classes.</p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'><a |
| name="_Toc496069420"></a><a name="_Toc496069777"><span style='mso-bookmark: |
| _Toc496069420'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></a></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069777'><span |
| style='mso-bookmark:_Toc496069420'>In SWT, positioning and sizing does not |
| happen automatically. Applications can decide to size and place a <i |
| style='mso-bidi-font-style:normal'>Composite</i>s children initially or in a |
| resize listener or they can specify a layout class to position and size the |
| children. If children are not given a size, they will have zero size and they |
| cannot be seen.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069777'><span |
| style='mso-bookmark:_Toc496069420'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069777'><span |
| style='mso-bookmark:_Toc496069420'>The diagram below illustrates a few general |
| terms that are used when discussing layouts. The <i>Composite</i> (in this |
| case, a <i>TabFolder</i>) has a <b>location</b>, <b>clientArea</b> and <b>trim</b>. |
| The size of the <i>Composite</i> is the size of the <b>clientArea</b> plus the |
| size of the <b>trim</b>. The <i>Composite</i> has two children that are laid |
| out side by side. A <i>Layout</i> is managing the size and position of the |
| children. This <i>Layout</i> allows <b>spacing</b> between the children, and a <b>margin</b> |
| between the children and the edges of the <i>Layout</i>. The size of the <i>Layout</i> |
| is the same as the size of the <i>Composite</i>s <b>clientArea</b>.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069777'><span |
| style='mso-bookmark:_Toc496069420'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><!--[if gte vml 1]><o:wrapblock><v:shapetype |
| id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" |
| path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> |
| <v:stroke joinstyle="miter"/> |
| <v:formulas> |
| <v:f eqn="if lineDrawn pixelLineWidth 0"/> |
| <v:f eqn="sum @0 1 0"/> |
| <v:f eqn="sum 0 0 @1"/> |
| <v:f eqn="prod @2 1 2"/> |
| <v:f eqn="prod @3 21600 pixelWidth"/> |
| <v:f eqn="prod @3 21600 pixelHeight"/> |
| <v:f eqn="sum @0 0 1"/> |
| <v:f eqn="prod @6 1 2"/> |
| <v:f eqn="prod @7 21600 pixelWidth"/> |
| <v:f eqn="sum @8 21600 0"/> |
| <v:f eqn="prod @7 21600 pixelHeight"/> |
| <v:f eqn="sum @10 21600 0"/> |
| </v:formulas> |
| <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/> |
| <o:lock v:ext="edit" aspectratio="t"/> |
| </v:shapetype><v:shape id="_x0000_s1067" type="#_x0000_t75" style='position:absolute; |
| left:0;text-align:left;margin-left:0;margin-top:0;width:390pt;height:222pt; |
| z-index:6'> |
| <v:imagedata src="./files/image001.png" o:title=""/> |
| <w:wrap type="topAndBottom" anchorx="page"/> |
| </v:shape><![if gte mso 9]><o:OLEObject Type="Embed" ProgID="PBrush" |
| ShapeID="_x0000_s1067" DrawAspect="Content" ObjectID="_1053162908"> |
| </o:OLEObject> |
| <![endif]><![endif]--><![if !vml]><img width=520 height=296 |
| src="./files/image002.jpg" v:shapes="_x0000_s1067"><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br |
| style='mso-ignore:vglayout' clear=ALL> |
| <span style='mso-bookmark:_Toc496069777'><span style='mso-bookmark:_Toc496069420'>The |
| <i>preferred size</i> of a widget is the minimum size needed to show its |
| content. In the case of a <i>Composite</i>, the preferred size is the smallest |
| rectangle that contains all of its children. If children have been positioned |
| by the application, the <i style='mso-bidi-font-style:normal'>Composite</i> |
| computes its own preferred size based on the size and position of the children. |
| If a <i style='mso-bidi-font-style:normal'>Composite</i> is using a layout |
| class to position its children, it asks the <i style='mso-bidi-font-style:normal'>Layout</i> |
| to compute the size of its <b>clientArea</b>, and then it adds in the <b>trim</b> |
| to determine its preferred size.</span></span></p> |
| |
| <span style='font-size:18.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h2 style='margin-left:17.0pt;mso-list:skip'><span style='mso-bookmark:_Toc496069777'><span |
| style='mso-bookmark:_Toc496069420'><a name="_Toc509864525">Standard Layouts</a></span></span></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>The standard layout |
| classes in the SWT library are:</p> |
| |
| <p class=MsoNormal style='margin-left:35.0pt;text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]><i style='mso-bidi-font-style:normal'>FillLayout</i> |
| lays out equal-sized widgets in a single row or column</p> |
| |
| <p class=MsoNormal style='margin-left:35.0pt;text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]><i style='mso-bidi-font-style:normal'>RowLayout</i> |
| lays out widgets in a row or rows, with fill, wrap, and spacing options</p> |
| |
| <p class=MsoNormal style='margin-left:35.0pt;text-indent:-.25in;mso-list:l0 level1 lfo2'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]><i style='mso-bidi-font-style:normal'>GridLayout</i> |
| lays out widgets in a grid</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>To use the standard |
| layouts, you need to import the SWT layout package:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>import</span> org.eclipse.swt.layout.*;</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>Layouts are |
| pluggable. To set a layout into a <i style='mso-bidi-font-style:normal'>Composite</i> |
| widget, you use the widgets <b style='mso-bidi-font-weight:normal'>setLayout(Layout)</b> |
| method. In the following code, a <i style='mso-bidi-font-style:normal'>Shell </i>(a |
| subclass of<i style='mso-bidi-font-style:normal'> Composite</i>) is told to |
| position its children using a <i style='mso-bidi-font-style:normal'>RowLayout</i>:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>Shell |
| shell = <span style='color:navy'>new</span> Shell();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>shell.setLayout(<span |
| style='color:navy'>new</span> RowLayout());</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>A layout class may |
| have a corresponding layout data class a subclass of <i style='mso-bidi-font-style: |
| normal'>Object</i> that contains layout data for a specific child. By |
| convention, layout data classes are identified by substituting <i |
| style='mso-bidi-font-style:normal'>Data</i> for <i style='mso-bidi-font-style: |
| normal'>Layout</i> in the class name. For example, the standard layout class <i |
| style='mso-bidi-font-style:normal'>RowLayout</i> has a layout data class called |
| <i style='mso-bidi-font-style:normal'>RowData</i>, and the layout class <i |
| style='mso-bidi-font-style:normal'>GridLayout</i> uses a layout data class |
| called <i style='mso-bidi-font-style:normal'>GridData</i>. Layout data classes |
| are set into a widget as follows:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>Button |
| button = <span style='color:navy'>new</span> Button(shell, SWT.PUSH);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>button.setLayoutData(<span |
| style='color:navy'>new</span> RowData(50, 40));</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <span style='font-size:18.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h2 style='margin-left:17.0pt'><a name="_Toc509864526">Examples in this |
| Document</a></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Most of the snapshots in this |
| document were taken by running variations on the following example code. We may |
| change the type of layout, the options used, or the type or number of children.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span> |
| org.eclipse.swt.*;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span> |
| org.eclipse.swt.widgets.*;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span> |
| org.eclipse.swt.layout.*;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>public</span> |
| <span style='color:navy'>class</span> LayoutExample {</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>public</span> <span style='color:navy'>static</span> <span |
| style='color:navy'>void</span> main(String[] args) {</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Display |
| display = <span style='color:navy'>new</span> Display();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Shell |
| shell = <span style='color:navy'>new</span> Shell(display);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:maroon'>// |
| Create the layout.</span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>RowLayout layout = </span><span |
| style='color:navy'>new</span><span style='color:black'> RowLayout();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:maroon'>// |
| Optionally set layout fields.</span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>layout.wrap = </span><span |
| style='color:navy'>true</span><span style='color:black'>;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:maroon'>// Set |
| the layout into the composite.</span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>shell.setLayout(layout);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:maroon'>// |
| Create the children of the composite.</span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span><span |
| style='mso-tab-count:1'> </span><span style='color:navy'>new</span> |
| Button(shell, SWT.PUSH).setText(<span style='color:teal'>"B1"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"Wide Button 2"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"Button 3"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.pack();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.open();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>while</span> (!shell.isDisposed()) {</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:3'> </span><span |
| style='color:navy'>if</span> (!display.readAndDispatch()) display.sleep();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>}</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>}</p> |
| |
| <p class=Code style='margin-left:17.0pt'>}</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Running the above code results in |
| the following:</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1063" type="#_x0000_t75" style='width:130.5pt;height:39.75pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image003.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=174 height=53 |
| src="./files/image004.jpg" v:shapes="_x0000_i1063"><![endif]></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>If the user resizes the shell so |
| that there is no longer room for <span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>Button 3</span> on the right, the <i style='mso-bidi-font-style: |
| normal'>RowLayout</i> wraps <span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>Button 3</span> to the next row, as follows:</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1064" type="#_x0000_t75" style='width:105.75pt;height:56.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image005.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=141 height=75 |
| src="./files/image006.jpg" v:shapes="_x0000_i1064"><![endif]></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Using layouts is closely tied with |
| resize, as we shall see. Consequently, most of the examples in this document |
| show what would happen if the <i style='mso-bidi-font-style:normal'>Composite</i> |
| becomes smaller or larger, in order to illustrate how the <i style='mso-bidi-font-style: |
| normal'>Layout</i> works.</p> |
| |
| <span style='font-size:18.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h2 style='margin-left:17.0pt'><a name="_Toc509864527"><span style='layout-grid-mode: |
| line'>FillLayout</span></a><span style='layout-grid-mode:line'><o:p></o:p></span></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><i |
| style='mso-bidi-font-style:normal'>FillLayout</i> is the simplest layout class. |
| It lays out widgets in a single row or column, forcing them to be the same |
| size. Initially, the widgets will all be as tall as the tallest widget, and as |
| wide as the widest. <i style='mso-bidi-font-style:normal'>FillLayout</i> does |
| not wrap, and you cannot specify margins or spacing. You might use it to lay |
| out buttons in a task bar or tool bar, or to stack checkboxes in a <i |
| style='mso-bidi-font-style:normal'>Group</i>. <i style='mso-bidi-font-style: |
| normal'>FillLayout</i> can also be used when a <i style='mso-bidi-font-style: |
| normal'>Composite</i> only has one child. For example, if a <i |
| style='mso-bidi-font-style:normal'>Shell</i> has a single <i style='mso-bidi-font-style: |
| normal'>Group</i> child, <i style='mso-bidi-font-style:normal'>FillLayout</i> |
| will cause the <i style='mso-bidi-font-style:normal'>Group</i> to completely |
| fill the <i style='mso-bidi-font-style:normal'>Shell</i>.</p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;mso-list:skip;tab-stops:.5in center 3.0in right 6.0in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>Here is the |
| relevant portion of the example code. First we create a <i style='mso-bidi-font-style: |
| normal'>FillLayout</i>, then (if we want vertical) we set its <b |
| style='mso-bidi-font-weight:normal'>type</b> field, and then we set it into the |
| <i style='mso-bidi-font-style:normal'>Composite</i> (a <i style='mso-bidi-font-style: |
| normal'>Shell</i>). The <i style='mso-bidi-font-style:normal'>Shell</i> has |
| three pushbutton children, <span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>B1</span>, <span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>B2</span>, and <span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>Button 3</span>. Note that in a <i style='mso-bidi-font-style: |
| normal'>FillLayout</i>, children are always the same size, and they fill all |
| available space.</p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;mso-list:skip;tab-stops:.5in center 3.0in right 6.0in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>FillLayout |
| fillLayout = <span style='color:navy'>new</span> FillLayout();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>fillLayout.type |
| = SWT.VERTICAL;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.setLayout(fillLayout);</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>The following table |
| shows the differences between a horizontal and vertical <i style='mso-bidi-font-style: |
| normal'>FillLayout</i>, initially and after the parent has grown.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <table border=0 cellspacing=0 cellpadding=0 style='margin-left:17.0pt; |
| border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'> |
| <tr> |
| <td width=145 valign=top style='width:108.9pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal style='mso-list:skip'><![if !supportEmptyParas]> <![endif]><b |
| style='mso-bidi-font-weight:normal'><o:p></o:p></b></p> |
| </td> |
| <td width=222 valign=top style='width:166.5pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <h5>Initial</h5> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <h5>After resize</h5> |
| </td> |
| </tr> |
| <tr> |
| <td width=145 valign=top style='width:108.9pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>fillLayout.type = |
| SWT.HORIZONTAL<o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>(default)<o:p></o:p></b></p> |
| </td> |
| <td width=222 valign=top style='width:166.5pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1065" type="#_x0000_t75" style='width:118.5pt;height:35.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image007.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=158 height=47 |
| src="./files/image008.jpg" v:shapes="_x0000_i1065"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1066" type="#_x0000_t75" style='width:137.25pt;height:50.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image009.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=183 height=67 |
| src="./files/image010.jpg" v:shapes="_x0000_i1066"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=145 valign=top style='width:108.9pt;border:none;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>fillLayout.type = |
| SWT.VERTICAL<o:p></o:p></b></p> |
| </td> |
| <td width=222 valign=top style='width:166.5pt;border:none;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1067" type="#_x0000_t75" style='width:67.5pt;height:66pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image011.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=90 height=88 |
| src="./files/image012.jpg" v:shapes="_x0000_i1067"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;mso-border-top-alt: |
| solid black .75pt;mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1068" type="#_x0000_t75" style='width:137.25pt;height:66.75pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image013.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=183 height=89 |
| src="./files/image014.jpg" v:shapes="_x0000_i1068"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| </table> |
| |
| <span style='font-size:18.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h2 style='margin-left:17.0pt'><a name="_Toc509864528">RowLayout</a></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><i |
| style='mso-bidi-font-style:normal'>RowLayout</i> is more commonly used than <i |
| style='mso-bidi-font-style:normal'>FillLayout</i> because of its ability to |
| wrap, and because it provides configurable margins and spacing. <i |
| style='mso-bidi-font-style:normal'>RowLayout</i> has a number of configuration |
| fields. In addition, the height and width of each widget in a <i |
| style='mso-bidi-font-style:normal'>RowLayout</i> can be specified by setting a <i |
| style='mso-bidi-font-style:normal'>RowData</i> object into the widget using <b |
| style='mso-bidi-font-weight:normal'>setLayoutData</b>.</p> |
| |
| <h3 style='margin-left:17.0pt'><a name="_Toc509864529">RowLayout Configuration |
| Fields</a></h3> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864530">Wrap</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>wrap</b> field controls whether or not the <i style='mso-bidi-font-style: |
| normal'>RowLayout</i> will wrap widgets into the next row if there isnt enough |
| space in the current row. <i style='mso-bidi-font-style:normal'>RowLayouts</i> |
| wrap by default.</p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864531">Pack</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>If the <b style='mso-bidi-font-weight: |
| normal'>pack</b> field is true, widgets in a <i style='mso-bidi-font-style: |
| normal'>RowLayout</i> will take their natural size, and they will be aligned as |
| far to the left as possible. If packing is false, widgets will fill the |
| available space, similar to the widgets in a <i style='mso-bidi-font-style: |
| normal'>FillLayout</i>. <i style='mso-bidi-font-style:normal'>RowLayouts</i> |
| pack by default.</p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864532">Justify</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>If the <b style='mso-bidi-font-weight: |
| normal'>justify</b> field is true, widgets in a <i style='mso-bidi-font-style: |
| normal'>RowLayout</i> are spread across the available space from left to right. |
| If the parent <i style='mso-bidi-font-style:normal'>Composite</i> grows wider, the |
| extra space is distributed evenly among the widgets. If both <b |
| style='mso-bidi-font-weight:normal'>pack</b> and <b style='mso-bidi-font-weight: |
| normal'>justify</b> are true, widgets take their natural size, and the extra |
| space is placed between the widgets in order to keep them fully justified. By |
| default, <i style='mso-bidi-font-style:normal'>RowLayouts</i> do not justify.</p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864533">MarginLeft, MarginTop, |
| MarginRight, MarginBottom and Spacing</a></h4> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'>These |
| fields control the number of pixels between widgets (<b style='mso-bidi-font-weight: |
| normal'>spacing</b>) and the number of pixels between a widget and the side of |
| the parent <i style='mso-bidi-font-style:normal'>Composite</i> (<b |
| style='mso-bidi-font-weight:normal'>margin</b>). By default, <i |
| style='mso-bidi-font-style:normal'>RowLayouts</i> leave 3 pixels for margin and |
| spacing. The margin and spacing fields are shown in the following diagram.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1069" type="#_x0000_t75" style='width:247.5pt;height:79.5pt' |
| o:ole="" fillcolor="window"> |
| <v:imagedata src="./files/image015.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=330 height=106 |
| src="./files/image016.jpg" v:shapes="_x0000_i1069"><![endif]><!--[if gte mso 9]><xml> |
| <o:OLEObject Type="Embed" ProgID="PBrush" ShapeID="_x0000_i1069" |
| DrawAspect="Content" ObjectID="_1053162910"> |
| </o:OLEObject> |
| </xml><![endif]--></p> |
| |
| <span style='font-size:14.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h3 style='margin-left:17.0pt'><a name="_Toc509864534">RowLayout Examples</a></h3> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>The following |
| example code creates a <i style='mso-bidi-font-style:normal'>RowLayout</i>, |
| sets all of its fields to non-default values, and then sets it into a <i |
| style='mso-bidi-font-style:normal'>Shell</i>. </p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>RowLayout |
| rowLayout = <span style='color:navy'>new</span> RowLayout();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.wrap |
| = false;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.pack |
| = false;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.justify |
| = true;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.marginLeft |
| = 5;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.marginTop |
| = 5;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.marginRight |
| = 5;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.marginBottom |
| = 5;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>rowLayout.spacing |
| = 0;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>shell.setLayout(rowLayout);</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>If you are using |
| the default field values, you only need one line of code:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>shell.setLayout(<span |
| style='color:navy'>new</span> RowLayout());</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>In the table below, |
| the result of setting specific fields is shown.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <table border=0 cellspacing=0 cellpadding=0 style='margin-left:17.0pt; |
| border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'> |
| <tr> |
| <td width=127 valign=top style='width:95.4pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal style='mso-list:skip'><![if !supportEmptyParas]> <![endif]><b |
| style='mso-bidi-font-weight:normal'><o:p></o:p></b></p> |
| </td> |
| <td width=240 valign=top style='width:2.5in;border-top:none;border-left:none; |
| border-bottom:solid black .75pt;border-right:solid black .75pt;mso-border-left-alt: |
| solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <h5>Initial</h5> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <h5>After resize</h5> |
| </td> |
| </tr> |
| <tr> |
| <td width=127 valign=top style='width:95.4pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>wrap = true<o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>pack = true<o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>justify = false<o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><span style='font-size:10.0pt;font-family:"Times New Roman"'>(defaults)<o:p></o:p></span></p> |
| </td> |
| <td width=240 valign=top style='width:2.5in;border-top:none;border-left:none; |
| border-bottom:solid black .75pt;border-right:solid black .75pt;mso-border-top-alt: |
| solid black .75pt;mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1070" type="#_x0000_t75" style='width:130.5pt;height:39.75pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image017.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=174 height=53 |
| src="./files/image018.jpg" v:shapes="_x0000_i1070"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1071" type="#_x0000_t75" style='width:106.5pt;height:56.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image019.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=142 height=75 |
| src="./files/image020.jpg" v:shapes="_x0000_i1071"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=127 valign=top style='width:95.4pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>wrap = false<o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><span style='font-size:10.0pt;font-family:"Times New Roman"'>(clips |
| if not enough space)<o:p></o:p></span></p> |
| </td> |
| <td width=240 valign=top style='width:2.5in;border-top:none;border-left:none; |
| border-bottom:solid black .75pt;border-right:solid black .75pt;mso-border-top-alt: |
| solid black .75pt;mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1072" type="#_x0000_t75" style='width:130.5pt;height:39.75pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image017.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=174 height=53 |
| src="./files/image021.jpg" v:shapes="_x0000_i1072"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1073" type="#_x0000_t75" style='width:106.5pt;height:56.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image022.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=142 height=75 |
| src="./files/image023.jpg" v:shapes="_x0000_i1073"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=127 valign=top style='width:95.4pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>pack = false<o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><span style='font-size:10.0pt;font-family:"Times New Roman"'>(all |
| widgets are the same size)<o:p></o:p></span></p> |
| </td> |
| <td width=240 valign=top style='width:2.5in;border-top:none;border-left:none; |
| border-bottom:solid black .75pt;border-right:solid black .75pt;mso-border-top-alt: |
| solid black .75pt;mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1074" type="#_x0000_t75" style='width:168.75pt;height:35.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image024.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=225 height=47 |
| src="./files/image025.jpg" v:shapes="_x0000_i1074"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1075" type="#_x0000_t75" style='width:148.5pt;height:56.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image026.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=198 height=75 |
| src="./files/image027.jpg" v:shapes="_x0000_i1075"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=127 valign=top style='width:95.4pt;border:none;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'>justify = true<o:p></o:p></b></p> |
| <p class=Code><b style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=Code><span style='font-size:10.0pt;font-family:"Times New Roman"'>(widgets |
| are spread across the available space)<o:p></o:p></span></p> |
| </td> |
| <td width=240 valign=top style='width:2.5in;border:none;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1076" type="#_x0000_t75" style='width:130.5pt;height:39.75pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image028.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=174 height=53 |
| src="./files/image029.jpg" v:shapes="_x0000_i1076"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| <td width=223 valign=top style='width:167.4pt;border:none;mso-border-top-alt: |
| solid black .75pt;mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1077" type="#_x0000_t75" style='width:156.75pt;height:38.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image030.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=209 height=51 |
| src="./files/image031.jpg" v:shapes="_x0000_i1077"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| </table> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <span style='font-size:14.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h3 style='margin-left:17.0pt'><a name="_Toc509864535">Using RowData Objects |
| with RowLayout</a></h3> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Each widget controlled by a <i |
| style='mso-bidi-font-style:normal'>RowLayout</i> can have its initial width and |
| height specified by setting a <i style='mso-bidi-font-style:normal'>RowData</i> |
| object into the widget. The following code uses <i style='mso-bidi-font-style: |
| normal'>RowData</i> objects to change the initial size of the <i |
| style='mso-bidi-font-style:normal'>Buttons</i> in a <i style='mso-bidi-font-style: |
| normal'>Shell</i>.</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span> |
| org.eclipse.swt.*;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span> |
| org.eclipse.swt.widgets.*;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span> |
| org.eclipse.swt.layout.*;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>public</span> |
| <span style='color:navy'>class</span> RowDataExample {</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>public</span> <span style='color:navy'>static</span> <span |
| style='color:navy'>void</span> main(String[] args) {</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Display |
| display = <span style='color:navy'>new</span> Display();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Shell |
| shell = <span style='color:navy'>new</span> Shell(display);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.setLayout(<span |
| style='color:navy'>new</span> RowLayout());</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Button |
| button1 = <span style='color:navy'>new</span> Button(shell, SWT.PUSH);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button1.setText(<span |
| style='color:teal'>"Button 1"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button1.setLayoutData(<span |
| style='color:navy'>new</span> RowData(50, 40));</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Button |
| button2 = <span style='color:navy'>new</span> Button(shell, SWT.PUSH);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button2.setText(<span |
| style='color:teal'>"Button 2"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button2.setLayoutData(<span |
| style='color:navy'>new</span> RowData(50, 30));</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Button |
| button3 = <span style='color:navy'>new</span> Button(shell, SWT.PUSH);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button3.setText(<span |
| style='color:teal'>"Button 3"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button3.setLayoutData(<span |
| style='color:navy'>new</span> RowData(50, 20));</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.pack();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.open();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>while</span> (!shell.isDisposed()) {</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:3'> </span><span |
| style='color:navy'>if</span> (!display.readAndDispatch()) display.sleep();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>}</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:1'> </span>}</p> |
| |
| <p class=Code style='margin-left:17.0pt'>}</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Here is what you see when you run |
| the above code.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1078" type="#_x0000_t75" style='width:129.75pt;height:54.75pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image032.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=173 height=73 |
| src="./files/image033.jpg" v:shapes="_x0000_i1078"><![endif]></p> |
| |
| <span style='font-size:18.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h2 style='margin-left:17.0pt'><a name="_Toc509864536">GridLayout</a></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><i |
| style='mso-bidi-font-style:normal'>GridLayout</i> is the most useful and |
| powerful of the standard layouts, but it is also the most complicated. With a <i |
| style='mso-bidi-font-style:normal'>GridLayout</i>, the widget children of a <i |
| style='mso-bidi-font-style:normal'>Composite</i> are laid out in a grid. <i |
| style='mso-bidi-font-style:normal'>GridLayout</i> has a number of configuration |
| fields, and, like <i style='mso-bidi-font-style:normal'>RowLayout</i>, the |
| widgets it lays out can have an associated layout data object, called <i |
| style='mso-bidi-font-style:normal'>GridData</i>. The power of <i |
| style='mso-bidi-font-style:normal'>GridLayout</i> lies in the ability to |
| configure <i style='mso-bidi-font-style:normal'>GridData</i> for each widget |
| controlled by the <i style='mso-bidi-font-style:normal'>GridLayout</i>.</p> |
| |
| <h3 style='margin-left:17.0pt'><a name="_Toc509864537">GridLayout Configuration |
| Fields</a></h3> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864538">NumColumns</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>numColumns</b> field is the most important field in a <i |
| style='mso-bidi-font-style:normal'>GridLayout</i>, and it is usually the first |
| field an application will set. Widgets are laid out in columns from left to |
| right, and a new row is created when <b style='mso-bidi-font-weight:normal'>numColumns</b> |
| + 1 widgets are added to the <i style='mso-bidi-font-style:normal'>Composite</i>. |
| The default is to have only 1 column. The following code creates a <i |
| style='mso-bidi-font-style:normal'>Shell</i> with five <i style='mso-bidi-font-style: |
| normal'>Button</i> children of various widths, managed by a <i |
| style='mso-bidi-font-style:normal'>GridLayout</i>. The table below shows the |
| grid when <b style='mso-bidi-font-weight:normal'>numColumns</b> is set to 1, 2, |
| or 3.</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Display |
| display = <span style='color:navy'>new</span> Display();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Shell |
| shell = <span style='color:navy'>new</span> Shell(display);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>GridLayout |
| gridLayout = <span style='color:navy'>new</span> GridLayout();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>gridLayout.numColumns |
| = 3;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.setLayout(gridLayout);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"B1"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"Wide Button 2"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"Button 3"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"B4"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"Button 5"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.pack();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>shell.open();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>while</span> (!shell.isDisposed()) {</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:3'> </span><span |
| style='color:navy'>if</span> (!display.readAndDispatch()) display.sleep();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>}</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <table border=0 cellspacing=0 cellpadding=0 style='margin-left:17.0pt; |
| border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'> |
| <tr> |
| <td width=197 valign=top style='width:2.05in;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><b |
| style='mso-bidi-font-weight:normal'>numColumns = 1<o:p></o:p></b></p> |
| </td> |
| <td width=197 valign=top style='width:2.05in;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><b |
| style='mso-bidi-font-weight:normal'>numColumns = 2<o:p></o:p></b></p> |
| </td> |
| <td width=197 valign=top style='width:2.05in;border:none;border-bottom:solid black .75pt; |
| mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><b |
| style='mso-bidi-font-weight:normal'>numColumns = 3<o:p></o:p></b></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=197 valign=top style='width:2.05in;border:none;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><b |
| style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=MsoNormal align=center style='text-align:center'><b |
| style='mso-bidi-font-weight:normal'><!--[if gte vml 1]><v:shape id="_x0000_i1079" |
| type="#_x0000_t75" style='width:84pt;height:117.75pt' fillcolor="window"> |
| <v:imagedata src="./files/image034.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=112 height=157 |
| src="./files/image035.jpg" v:shapes="_x0000_i1079"><![endif]><o:p></o:p></b></p> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><b |
| style='mso-bidi-font-weight:normal'><o:p></o:p></b></p> |
| </td> |
| <td width=197 valign=top style='width:2.05in;border:none;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1080" type="#_x0000_t75" style='width:113.25pt;height:80.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image036.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=151 height=107 |
| src="./files/image037.jpg" v:shapes="_x0000_i1080"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| <td width=197 valign=top style='width:2.05in;border:none;mso-border-top-alt: |
| solid black .75pt;mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1081" type="#_x0000_t75" style='width:134.25pt;height:61.5pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image038.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image039.jpg" v:shapes="_x0000_i1081"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| </table> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <span style='font-size:12.0pt;mso-bidi-font-size:10.0pt;font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman";mso-ansi-language:EN-US;mso-fareast-language: |
| EN-US;mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always'> |
| </span> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864539">MakeColumnsEqualWidth</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>makeColumnsEqualWidth</b> field forces the columns to be the same width. |
| The default is false. If we change the example above to have 3 columns of equal |
| width, this is what we would get (note that in the absence of further |
| instruction, widgets are left-justified in their columns):</p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'><!--[if gte vml 1]><o:wrapblock><v:shape |
| id="_x0000_s1053" type="#_x0000_t75" style='position:absolute;left:0; |
| text-align:left;margin-left:76.05pt;margin-top:0;width:249.8pt;height:104.25pt; |
| z-index:1' o:allowincell="f"> |
| <v:imagedata src="./files/image040.png" o:title=""/> |
| <w:wrap type="topAndBottom" anchorx="page"/> |
| </v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout'> |
| <table cellpadding=0 cellspacing=0 align=left> |
| <tr> |
| <td width=101 height=0></td> |
| </tr> |
| <tr> |
| <td></td> |
| <td><img width=333 height=139 |
| src="./files/image041.jpg" v:shapes="_x0000_s1053"></td> |
| </tr> |
| </table> |
| </span><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br |
| style='mso-ignore:vglayout' clear=ALL> |
| <![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <br style='mso-ignore:vglayout' clear=ALL> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864540">MarginWidth, |
| MarginHeight, HorizontalSpacing, and VerticalSpacing</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>margin</b> and <b style='mso-bidi-font-weight:normal'>spacing</b> |
| fields in a <i style='mso-bidi-font-style:normal'>GridLayout</i> are similar to |
| those in a <i style='mso-bidi-font-style:normal'>RowLayout</i>. The difference |
| is that the left and right margins are grouped into <b style='mso-bidi-font-weight: |
| normal'>marginWidth</b>, and the top and bottom margins are grouped into <b |
| style='mso-bidi-font-weight:normal'>marginHeight</b>. Also, in a <i |
| style='mso-bidi-font-style:normal'>GridLayout</i> you can specify <b |
| style='mso-bidi-font-weight:normal'>verticalSpacing</b>, whereas in a <i |
| style='mso-bidi-font-style:normal'>RowLayout</i>, only <b style='mso-bidi-font-weight: |
| normal'>horizontalSpacing</b> applied.</p> |
| |
| <h3 style='margin-left:17.0pt'><a name="_Toc509864541">GridData Object Fields</a></h3> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><i |
| style='mso-bidi-font-style:normal'>GridData</i> is the layout data object |
| associated with <i style='mso-bidi-font-style:normal'>GridLayout</i>. To set a <i |
| style='mso-bidi-font-style:normal'>GridData</i> object into a widget, you use |
| the <b style='mso-bidi-font-weight:normal'>setLayoutData</b> method. For |
| example, to set the <i style='mso-bidi-font-style:normal'>GridData</i> for a <i |
| style='mso-bidi-font-style:normal'>Button</i>, we could do the following:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Button |
| button1 = <span style='color:navy'>new</span> Button(shell, SWT.PUSH);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button1.setText(<span |
| style='color:teal'>"B1"</span>);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button1.setLayoutData(<span |
| style='color:navy'>new</span> GridData());</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><span |
| style="mso-spacerun: yes"> </span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>Of course, this |
| code just creates a <i style='mso-bidi-font-style:normal'>GridData</i> object |
| with all of its fields set to their default values, which is the same as not |
| setting the layout data at all. There are two ways to create a <i |
| style='mso-bidi-font-style:normal'>GridData</i> object with certain fields set. |
| The first is to set the fields directly, like this:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>GridData |
| gridData = <span style='color:navy'>new</span> GridData();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>gridData.horizontalAlignment |
| = GridData.FILL;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>gridData.grabExcessHorizontalSpace |
| = true;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button1.setLayoutData(gridData);</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>The second is to |
| take advantage of convenience API style bits defined by <i style='mso-bidi-font-style: |
| normal'>GridData</i>:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button1.setLayoutData(<span |
| style='color:navy'>new</span> GridData(GridData.HORIZONTAL_ALIGN_FILL | |
| GridData.GRAB_HORIZONTAL));</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>In fact, certain |
| common style bit combinations are provided for further convenience:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button1.setLayoutData(new |
| GridData(GridData.FILL_HORIZONTAL));</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Note that FILL_ convenience |
| styles set both fill alignment <i style='mso-bidi-font-style:normal'>and</i> |
| grab. <i style='mso-bidi-font-style:normal'>GridData</i> style bits can only be |
| used for boolean and enumeration fields. Numeric fields must be set directly.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>One final note about <i>GridData</i> |
| objects before we get into their fields: do not reuse <i>GridData</i> objects. Every |
| widget in a <i>Composite</i> that is managed by a <i>GridLayout</i> must have a |
| unique <i>GridData</i> object. If the layout data for a widget in a <i>GridLayout</i> |
| is null at layout time, a unique <i>GridData</i> object is created for it.</p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864542">HorizontalAlignment and |
| VerticalAlignment</a> </h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>alignment</b> fields specify where to place a widget horizontally |
| and/or vertically within its grid cell. Each alignment field can have any of |
| the following values:</p> |
| |
| <p class=MsoNormal style='margin-left:71.0pt;text-indent:-.25in;mso-list:l3 level1 lfo4; |
| tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span |
| style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>BEGINNING</p> |
| |
| <p class=MsoNormal style='margin-left:71.0pt;text-indent:-.25in;mso-list:l3 level1 lfo4; |
| tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span |
| style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>CENTER</p> |
| |
| <p class=MsoNormal style='margin-left:71.0pt;text-indent:-.25in;mso-list:l3 level1 lfo4; |
| tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span |
| style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>END</p> |
| |
| <p class=MsoNormal style='margin-left:71.0pt;text-indent:-.25in;mso-list:l3 level1 lfo4; |
| tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span |
| style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>FILL</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The default horizontalAlignment |
| is BEGINNING (or left-aligned). The default verticalAlignment is CENTER.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Lets go back to our five-button |
| example with three columns, and we will vary the <b style='mso-bidi-font-weight: |
| normal'>horizontalAlignment</b> of <span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>Button 5</span>.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <table border=0 cellspacing=0 cellpadding=0 style='margin-left:17.0pt; |
| border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt'> |
| <tr> |
| <td width=319 valign=top style='width:239.4pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=Code>horizontalAlignment = GridData.BEGINNING<b style='mso-bidi-font-weight: |
| normal'><o:p></o:p></b></p> |
| </td> |
| <td width=271 valign=top style='width:203.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><b |
| style='mso-bidi-font-weight:normal'><![if !supportEmptyParas]> <![endif]><o:p></o:p></b></p> |
| <p class=MsoNormal align=center style='text-align:center'><b |
| style='mso-bidi-font-weight:normal'><!--[if gte vml 1]><v:shape id="_x0000_i1082" |
| type="#_x0000_t75" style='width:134.25pt;height:61.5pt' fillcolor="window"> |
| <v:imagedata src="./files/image042.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image043.jpg" v:shapes="_x0000_i1082"><![endif]><o:p></o:p></b></p> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><b |
| style='mso-bidi-font-weight:normal'><o:p></o:p></b></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=319 valign=top style='width:239.4pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=Code>horizontalAlignment = GridData.CENTER<b style='mso-bidi-font-weight: |
| normal'><o:p></o:p></b></p> |
| </td> |
| <td width=271 valign=top style='width:203.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1083" type="#_x0000_t75" style='width:134.25pt;height:61.5pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image044.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image045.jpg" v:shapes="_x0000_i1083"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=319 valign=top style='width:239.4pt;border-top:none;border-left: |
| none;border-bottom:solid black .75pt;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=Code>horizontalAlignment = GridData.END<b style='mso-bidi-font-weight: |
| normal'><o:p></o:p></b></p> |
| </td> |
| <td width=271 valign=top style='width:203.4pt;border:none;border-bottom:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;mso-border-left-alt:solid black .75pt; |
| padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1084" type="#_x0000_t75" style='width:134.25pt;height:61.5pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image046.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image047.jpg" v:shapes="_x0000_i1084"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| <tr> |
| <td width=319 valign=top style='width:239.4pt;border:none;border-right:solid black .75pt; |
| mso-border-top-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=Code><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=Code>horizontalAlignment = GridData.FILL<b style='mso-bidi-font-weight: |
| normal'><o:p></o:p></b></p> |
| </td> |
| <td width=271 valign=top style='width:203.4pt;border:none;mso-border-top-alt: |
| solid black .75pt;mso-border-left-alt:solid black .75pt;padding:0in 5.4pt 0in 5.4pt'> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| <p class=MsoNormal align=center style='text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1085" type="#_x0000_t75" style='width:134.25pt;height:61.5pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image048.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image049.jpg" v:shapes="_x0000_i1085"><![endif]></p> |
| <p class=MsoNormal align=center style='text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| </td> |
| </tr> |
| </table> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864543">HorizontalIndent</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>horizontalIndent</b> field allows you to move a widget to the right by a |
| specified number of pixels. This field is typically only useful when the <b |
| style='mso-bidi-font-weight:normal'>horizontalAlignment</b> is BEGINNING. We |
| cannot use a style bit to set the indent, so we will indent <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 5 </span>in |
| our example by 4 pixels as follows:</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><!--[if gte vml 1]><o:wrapblock><v:shape |
| id="_x0000_s1061" type="#_x0000_t75" style='position:absolute;left:0; |
| text-align:left;margin-left:0;margin-top:0;width:134.25pt;height:61.5pt; |
| z-index:3;mso-wrap-edited:f;mso-position-horizontal:left; |
| mso-position-vertical:top' wrapcoords="-121 0 -121 21337 21600 21337 21600 0 -121 0"> |
| <v:imagedata src="./files/image050.png" o:title=""/> |
| <w:wrap type="topAndBottom" anchorx="page"/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image051.jpg" v:shapes="_x0000_s1061"><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br |
| style='mso-ignore:vglayout' clear=ALL> |
| <![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <br style='mso-ignore:vglayout' clear=ALL> |
| |
| <p class=Code style='margin-left:17.0pt'>GridData gridData = <span |
| style='color:navy'>new</span> GridData();</p> |
| |
| <p class=Code style='margin-left:17.0pt'>gridData.horizontalIndent = 4;</p> |
| |
| <p class=Code style='margin-left:17.0pt'>button5.setLayoutData(gridData);</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864544">HorizontalSpan and |
| VerticalSpan</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>span</b> fields let widgets occupy more than one grid cell. They are |
| often used in conjunction with FILL alignment. We can make <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 5</span> in |
| our example span the last two cells as follows:</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><!--[if gte vml 1]><o:wrapblock><v:shape |
| id="_x0000_s1060" type="#_x0000_t75" style='position:absolute;left:0; |
| text-align:left;margin-left:0;margin-top:0;width:134.25pt;height:61.5pt; |
| z-index:2;mso-wrap-edited:f;mso-position-horizontal:left; |
| mso-position-vertical:top' wrapcoords="-121 0 -121 21337 21600 21337 21600 0 -121 0" |
| o:allowoverlap="f"> |
| <v:imagedata src="./files/image052.png" o:title=""/> |
| <w:wrap type="topAndBottom" anchorx="page"/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image053.jpg" v:shapes="_x0000_s1060"><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br |
| style='mso-ignore:vglayout' clear=ALL> |
| <![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <br style='mso-ignore:vglayout' clear=ALL> |
| |
| <p class=Code style='margin-left:17.0pt'>GridData gridData = <span |
| style='color:navy'>new</span> GridData();</p> |
| |
| <p class=Code style='margin-left:17.0pt'>gridData.horizontalAlignment = |
| GridData.FILL;<span style='font-size:10.0pt'> </span></p> |
| |
| <p class=Code style='margin-left:17.0pt'>gridData.horizontalSpan = 2;</p> |
| |
| <p class=Code style='margin-left:17.0pt'>button5.setLayoutData(gridData);</p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>If we decide to make <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Wide Button 2</span> |
| span two cells instead, we would end up with this:</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><!--[if gte vml 1]><o:wrapblock><v:shape |
| id="_x0000_s1062" type="#_x0000_t75" style='position:absolute;left:0; |
| text-align:left;margin-left:5.55pt;margin-top:0;width:113.25pt;height:61.5pt; |
| z-index:4;mso-position-horizontal:absolute;mso-position-vertical:top'> |
| <v:imagedata src="./files/image054.png" o:title=""/> |
| <w:wrap type="topAndBottom" anchorx="page"/> |
| </v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout'> |
| <table cellpadding=0 cellspacing=0 align=left> |
| <tr> |
| <td width=7 height=0></td> |
| </tr> |
| <tr> |
| <td></td> |
| <td><img width=151 height=82 |
| src="./files/image055.jpg" v:shapes="_x0000_s1062"></td> |
| </tr> |
| </table> |
| </span><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br |
| style='mso-ignore:vglayout' clear=ALL> |
| <![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <br style='mso-ignore:vglayout' clear=ALL> |
| |
| <p class=Code style='margin-left:17.0pt'>GridData gridData = <span |
| style='color:navy'>new</span> GridData();</p> |
| |
| <p class=Code style='margin-left:17.0pt'>gridData.horizontalAlignment = |
| GridData.FILL;</p> |
| |
| <p class=Code style='margin-left:17.0pt'>gridData.horizontalSpan = 2;</p> |
| |
| <p class=Code style='margin-left:17.0pt'>button2.setLayoutData(gridData);</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Or we could make <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 3</span> |
| span two cells vertically:</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><!--[if gte vml 1]><o:wrapblock><v:shape |
| id="_x0000_s1063" type="#_x0000_t75" style='position:absolute;left:0; |
| text-align:left;margin-left:0;margin-top:0;width:134.25pt;height:61.5pt; |
| z-index:5;mso-position-horizontal:left;mso-position-vertical:top'> |
| <v:imagedata src="./files/image056.png" o:title=""/> |
| <w:wrap type="topAndBottom" anchorx="page"/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image057.jpg" v:shapes="_x0000_s1063"><![endif]><!--[if gte vml 1]></o:wrapblock><![endif]--><br |
| style='mso-ignore:vglayout' clear=ALL> |
| <![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <br style='mso-ignore:vglayout' clear=ALL> |
| |
| <p class=Code style='margin-left:17.0pt'>GridData gridData = <span |
| style='color:navy'>new</span> GridData();</p> |
| |
| <p class=Code style='margin-left:17.0pt'>gridData.verticalAlignment = |
| GridData.FILL;</p> |
| |
| <p class=Code style='margin-left:17.0pt'>gridData.verticalSpan = 2;</p> |
| |
| <p class=Code style='margin-left:17.0pt'>button3.setLayoutData(gridData);</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864545">GrabExcessHorizontalSpace |
| and GrabExcessVerticalSpace</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>grabExcessHorizontalSpace</b> and <b style='mso-bidi-font-weight:normal'>grabExcessVerticalSpace</b> |
| fields are typically used for larger widgets such as <i style='mso-bidi-font-style: |
| normal'>Texts</i> or <i style='mso-bidi-font-style:normal'>Lists</i> to allow |
| them to grow if their containing <i style='mso-bidi-font-style:normal'>Composite</i> |
| grows. If a <i style='mso-bidi-font-style:normal'>Text</i> is grabbing excess |
| horizontal space and the user resizes the <i style='mso-bidi-font-style:normal'>Shell</i> |
| wider, then the <i style='mso-bidi-font-style:normal'>Text</i> will get all of the |
| new horizontal space and other widgets in the same row will stay their original |
| width. Of course, the widget that is grabbing excess space is also the first |
| one to shrink when the <i style='mso-bidi-font-style:normal'>Shell</i> gets |
| smaller. It is easiest to always think of the <b style='mso-bidi-font-weight: |
| normal'>grabExcessSpace</b> fields in the context of resizing. For a simple |
| example, lets reuse the previous example where <span style='font-size:9.0pt; |
| mso-bidi-font-size:10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>Button 3</span> spanned two cells vertically. Here it is |
| again:</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1086" type="#_x0000_t75" style='width:134.25pt;height:61.5pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image056.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image058.jpg" v:shapes="_x0000_i1086"><![endif]></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>If we resize this window, the |
| only thing that happens is the window gets bigger:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1087" type="#_x0000_t75" style='width:151.5pt;height:84pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image059.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=202 height=112 |
| src="./files/image060.jpg" v:shapes="_x0000_i1087"><![endif]></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Now we will tell <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 3 </span>to |
| grab excess horizontal and vertical space, and <span style='font-size:9.0pt; |
| mso-bidi-font-size:10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>B1</span> and <span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>B4</span> to fill vertically (without grabbing), and we |
| resize the window again:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1088" type="#_x0000_t75" style='width:178.5pt;height:87pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image061.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=238 height=116 |
| src="./files/image062.jpg" v:shapes="_x0000_i1088"><![endif]></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>This time, <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 3 </span>grew |
| in both directions, and <span style='font-size:9.0pt;mso-bidi-font-size:10.0pt; |
| font-family:"Courier New";mso-bidi-font-family:"Times New Roman";layout-grid-mode: |
| line'>B4</span> grew vertically. The other buttons stayed their original sizes. |
| Because <span style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family: |
| "Courier New";mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button |
| 3</span> was grabbing vertically and it spans two rows, the <i |
| style='mso-bidi-font-style:normal'>last</i> row that it spans grew taller. Note |
| that <span style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>B1</span> did not |
| grow although it is filling vertically because its row did not grow. Since <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 3</span> |
| was grabbing horizontally, its column grew wider, and since it was filling |
| horizontally, it grew wider to fill the column. Here is the code for all five |
| buttons:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Button button1 = </span><span |
| style='color:navy'>new</span><span style='color:black'> Button(shell, |
| SWT.PUSH);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>button1.setText(</span><span |
| style='color:teal'>"B1"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>GridData gridData = </span><span |
| style='color:navy'>new</span><span style='color:black'> GridData();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.verticalAlignment = |
| GridData.FILL;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>button1.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>new</span><span |
| style='color:black'> Button(shell, SWT.PUSH).setText(</span><span |
| style='color:teal'>"Wide Button 2"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Button button3 = </span><span |
| style='color:navy'>new</span><span style='color:black'> Button(shell, |
| SWT.PUSH);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>button3.setText(</span><span |
| style='color:teal'>"Button 3"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> GridData();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.verticalAlignment = |
| GridData.FILL;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.verticalSpan = 2;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.grabExcessVerticalSpace = </span><span |
| style='color:navy'>true</span><span style='color:black'>;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.horizontalAlignment = |
| GridData.FILL;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.grabExcessHorizontalSpace = </span><span |
| style='color:navy'>true</span><span style='color:black'>;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>button3.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Button button4 = </span><span |
| style='color:navy'>new</span><span style='color:black'> Button(shell, |
| SWT.PUSH);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>button4.setText(</span><span |
| style='color:teal'>"B4"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> GridData();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.verticalAlignment = |
| GridData.FILL;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>button4.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>new</span><span |
| style='color:black'> Button(shell, SWT.PUSH).setText(</span><span |
| style='color:teal'>"Button 5"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>In a typical application window, |
| you often want to have at least one widget that is grabbing. If more than one |
| widget is trying to grab the same space, then the excess space is shared evenly |
| among the grabbing widgets:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1089" type="#_x0000_t75" style='width:84pt;height:42.75pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image063.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=112 height=57 |
| src="./files/image064.jpg" v:shapes="_x0000_i1089"><![endif]><span |
| style='mso-tab-count:1'> </span><!--[if gte vml 1]><v:shape id="_x0000_i1090" |
| type="#_x0000_t75" style='width:184.5pt;height:42.75pt' fillcolor="window"> |
| <v:imagedata src="./files/image065.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=246 height=57 |
| src="./files/image066.jpg" v:shapes="_x0000_i1090"><![endif]></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>One final point to note about |
| grabbing. If a widget is grabbing excess horizontal space and its parent <i |
| style='mso-bidi-font-style:normal'>Composite</i> grows wider, then the entire <i |
| style='mso-bidi-font-style:normal'>column</i> containing that widget grows |
| wider. If a widget is grabbing excess vertical space and its parent <i |
| style='mso-bidi-font-style:normal'>Composite</i> grows taller, then the entire <i |
| style='mso-bidi-font-style:normal'>row</i> containing that widget grows taller. |
| The implication of this is that if any other widget in the affected column or |
| row has <i style='mso-bidi-font-style:normal'>fill</i> alignment, then it will |
| stretch also. Widgets that have beginning, center, or end alignment will not |
| stretch they will stay at the beginning, center or end of the wider column or |
| taller row.</p> |
| |
| <h4 style='margin-left:17.0pt'><a name="_Toc509864546">WidthHint and HeightHint</a></h4> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The <b style='mso-bidi-font-weight: |
| normal'>widthHint</b> and <b style='mso-bidi-font-weight:normal'>heightHint</b> |
| fields indicate the number of pixels wide or tall that you would like a widget |
| to be, if it does not conflict with other requirements in the <i |
| style='mso-bidi-font-style:normal'>GridLayout</i>s constraint system. Looking |
| back at the five-button, three-column example, say we want <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 5</span> |
| to be 70 pixels wide and 40 pixels tall. We code it as follows:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>GridData |
| gridData = <span style='color:navy'>new</span> GridData();</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>gridData.widthHint |
| = 70;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>gridData.heightHint |
| = 40;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>button5.setLayoutData(gridData);</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>The natural size of <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 5</span> |
| is shown in the window on the left, below, and the 70-pixel wide, 40-pixel tall |
| <span style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 5</span> |
| is on the right.</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1091" type="#_x0000_t75" style='width:134.25pt;height:61.5pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image038.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=82 |
| src="./files/image067.jpg" v:shapes="_x0000_i1091"><![endif]><span |
| style='mso-tab-count:2'> </span><!--[if gte vml 1]><v:shape |
| id="_x0000_i1092" type="#_x0000_t75" style='width:134.25pt;height:76.5pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image068.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=179 height=102 |
| src="./files/image069.jpg" v:shapes="_x0000_i1092"><![endif]></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>Note, however, that |
| if the <b style='mso-bidi-font-weight:normal'>horizontalAlignment</b> of <span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Button 5</span> |
| was FILL, then the <i style='mso-bidi-font-style:normal'>GridLayout</i> would |
| not have been able to honor the request for a width of 70 pixels.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'>One final comment |
| about using width and height hints. Something that looks good on one platform |
| may not look good on another. The variation between font sizes and natural widget |
| sizes across platforms means that hard-coding pixel values is not usually the |
| best way to lay out windows. So, keep the use of size hints to a minimum, if |
| you use them at all.</p> |
| |
| <span style='font-size:14.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h3 style='margin-left:17.0pt'><a name="_Toc509864547">A Complex GridLayout |
| Example</a></h3> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>So far, the <i style='mso-bidi-font-style: |
| normal'>GridLayout</i> examples have been fairly simple, in order to show how |
| each field works. Now, we will put them all together to create a more |
| complicated example. We start by hand-drawing a rough sketch of the window we |
| want to create, to determine things like how many columns the grid should contain, |
| and whether or not any widgets need to span.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style="mso-spacerun: |
| yes"> </span><!--[if gte vml 1]><v:shape id="_x0000_i1093" type="#_x0000_t75" |
| style='width:386.25pt;height:271.5pt' o:ole="" fillcolor="window"> |
| <v:imagedata src="./files/image070.gif" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=515 height=362 |
| src="./files/image070.gif" v:shapes="_x0000_i1093"><![endif]><!--[if gte mso 9]><xml> |
| <o:OLEObject Type="Embed" ProgID="PBrush" ShapeID="_x0000_i1093" |
| DrawAspect="Content" ObjectID="_1053162911"> |
| </o:OLEObject> |
| </xml><![endif]--></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Then we start coding the example |
| from the diagram. The code is below. Note that we have added a bit of logic to |
| make the code more interesting, for example, <span style='font-size:9.0pt; |
| mso-bidi-font-size:10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>Browse
</span> opens a <i style='mso-bidi-font-style: |
| normal'>FileDialog</i> to read an <i style='mso-bidi-font-style:normal'>Image</i> |
| file which the <i style='mso-bidi-font-style:normal'>Canvas</i> displays in a |
| paint listener, <span style='font-size:9.0pt;mso-bidi-font-size:10.0pt; |
| font-family:"Courier New";mso-bidi-font-family:"Times New Roman";layout-grid-mode: |
| line'>Delete</span> deletes the <i style='mso-bidi-font-style:normal'>Image</i>, |
| and <span style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>Enter</span> |
| prints the current dog and owner info. The example has been coded in a single <b |
| style='mso-bidi-font-weight:normal'>main</b> method to keep it as simple as |
| possible.</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span><span |
| style='color:black'> org.eclipse.swt.*;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span><span |
| style='color:black'> org.eclipse.swt.widgets.*;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span><span |
| style='color:black'> org.eclipse.swt.layout.*;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span><span |
| style='color:black'> org.eclipse.swt.events.*;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>import</span><span |
| style='color:black'> org.eclipse.swt.graphics.*;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:navy'>public</span><span |
| style='color:black'> </span><span style='color:navy'>class</span><span |
| style='color:black'> ComplexGridLayoutExample {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Display display;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Shell shell;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Text dogName;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Combo dogBreed;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Canvas dogPhoto;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Image dogImage;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> List categories;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Text ownerName;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>static</span><span |
| style='color:black'> Text ownerPhone;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span></span><span style='color:navy'>public</span><span |
| style='color:black'> </span><span style='color:navy'>static</span><span |
| style='color:black'> </span><span style='color:navy'>void</span><span |
| style='color:black'> main(String[] args) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>display = </span><span style='color:navy'>new</span><span |
| style='color:black'> Display();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>shell = </span><span style='color:navy'>new</span><span |
| style='color:black'> Shell(display);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>shell.setText(</span><span |
| style='color:teal'>"Dog Show Entry"</span><span style='color:black'>);</span><span |
| style='color:teal'><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>GridLayout gridLayout = </span><span |
| style='color:navy'>new</span><span style='color:black'> GridLayout();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridLayout.numColumns = 3;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>shell.setLayout(gridLayout);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>new</span><span |
| style='color:black'> Label(shell, SWT.NULL).setText(</span><span |
| style='color:teal'>"Dog's Name:"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogName = </span><span style='color:navy'>new</span><span |
| style='color:black'> Text(shell, SWT.SINGLE | SWT.BORDER);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>GridData gridData = </span><span |
| style='color:navy'>new</span><span style='color:black'> |
| GridData(GridData.HORIZONTAL_ALIGN_FILL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.horizontalSpan = 2;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogName.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>new</span><span |
| style='color:black'> Label(shell, SWT.NULL).setText(</span><span |
| style='color:teal'>"Breed:"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogBreed = </span><span style='color: |
| navy'>new</span><span style='color:black'> Combo(shell, SWT.NULL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogBreed.setItems(</span><span |
| style='color:navy'>new</span><span style='color:black'> String [] {</span><span |
| style='color:teal'>"Collie"</span><span style='color:black'>, </span><span |
| style='color:teal'>"Pitbull"</span><span style='color:black'>, </span><span |
| style='color:teal'>"Poodle"</span><span style='color:black'>, </span><span |
| style='color:teal'>"Scottie"</span><span style='color:black'>});<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogBreed.setLayoutData(</span><span |
| style='color:navy'>new</span><span style='color:black'> |
| GridData(GridData.HORIZONTAL_ALIGN_FILL));<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Label label = </span><span |
| style='color:navy'>new</span><span style='color:black'> Label(shell, SWT.NULL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>label.setText(</span><span |
| style='color:teal'>"Categories"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>label.setLayoutData(</span><span |
| style='color:navy'>new</span><span style='color:black'> |
| GridData(GridData.HORIZONTAL_ALIGN_CENTER));<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>new</span><span |
| style='color:black'> Label(shell, SWT.NULL).setText(</span><span |
| style='color:teal'>"Photo:"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogPhoto = </span><span style='color: |
| navy'>new</span><span style='color:black'> Canvas(shell, SWT.BORDER);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> GridData(GridData.FILL_BOTH);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.widthHint = 80;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.heightHint = 80;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.verticalSpan = 3;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogPhoto.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>dogPhoto.addPaintListener(</span><span |
| style='color:navy'>new</span><span style='color:black'> PaintListener() {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:navy'>public</span><span |
| style='color:black'> </span><span style='color:navy'>void</span><span |
| style='color:black'> paintControl(</span><span style='color:navy'>final</span><span |
| style='color:black'> PaintEvent event) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span></span><span style='color:navy'>if</span><span |
| style='color:black'> (dogImage != </span><span style='color:navy'>null</span><span |
| style='color:black'>) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:5'> </span>event.gc.drawImage(dogImage, 0, |
| 0);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>});<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>categories = </span><span |
| style='color:navy'>new</span><span style='color:black'> List(shell, SWT.MULTI | |
| SWT.BORDER | SWT.V_SCROLL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>categories.setItems(</span><span |
| style='color:navy'>new</span><span style='color:black'> String [] {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:teal'>"Best |
| of Breed"</span><span style='color:black'>, </span><span style='color: |
| teal'>"Prettiest Female"</span><span style='color:black'>, </span><span |
| style='color:teal'>"Handsomest Male"</span><span style='color:black'>,<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:teal'>"Best |
| Dressed"</span><span style='color:black'>, </span><span style='color:teal'>"Fluffiest |
| Ears"</span><span style='color:black'>, </span><span style='color:teal'>"Most |
| Colors"</span><span style='color:black'>,<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:teal'>"Best |
| Performer"</span><span style='color:black'>, </span><span |
| style='color:teal'>"Loudest Bark"</span><span style='color:black'>, </span><span |
| style='color:teal'>"Best Behaved"</span><span style='color:black'>,<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:teal'>"Prettiest |
| Eyes"</span><span style='color:black'>, </span><span style='color:teal'>"Most |
| Hair"</span><span style='color:black'>, </span><span style='color:teal'>"Longest |
| Tail"</span><span style='color:black'>,<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:teal'>"Cutest |
| Trick"</span><span style='color:black'>});<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> |
| GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.verticalSpan = 4;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>int</span> listHeight = categories.getItemHeight() * 12;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>Rectangle |
| trim = categories.computeTrim(0, 0, 0, listHeight);</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-tab-count:2'> </span>gridData.heightHint |
| = trim.height;</p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>categories.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Button browse = </span><span |
| style='color:navy'>new</span><span style='color:black'> Button(shell, |
| SWT.PUSH);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>browse.setText(</span><span |
| style='color:teal'>"Browse..."</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> GridData(GridData.HORIZONTAL_ALIGN_FILL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.horizontalIndent = 5;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>browse.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>browse.addSelectionListener(</span><span |
| style='color:navy'>new</span><span style='color:black'> SelectionAdapter() {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:navy'>public</span><span |
| style='color:black'> </span><span style='color:navy'>void</span><span |
| style='color:black'> widgetSelected(SelectionEvent event) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>String fileName = </span><span |
| style='color:navy'>new</span><span style='color:black'> |
| FileDialog(shell).open();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span></span><span style='color:navy'>if</span><span |
| style='color:black'> (fileName != </span><span style='color:navy'>null</span><span |
| style='color:black'>) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:5'> </span>dogImage = </span><span |
| style='color:navy'>new</span><span style='color:black'> Image(display, |
| fileName);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>});<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Button delete = </span><span |
| style='color:navy'>new</span><span style='color:black'> Button(shell, |
| SWT.PUSH);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>delete.setText(</span><span |
| style='color:teal'>"Delete"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> |
| GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_BEGINNING);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.horizontalIndent = 5;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>delete.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>delete.addSelectionListener(</span><span |
| style='color:navy'>new</span><span style='color:black'> SelectionAdapter() {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:navy'>public</span><span |
| style='color:black'> </span><span style='color:navy'>void</span><span |
| style='color:black'> widgetSelected(SelectionEvent event) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span></span><span style='color:navy'>if</span><span |
| style='color:black'> (dogImage != </span><span style='color:navy'>null</span><span |
| style='color:black'>) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:5'> </span>dogImage.dispose();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:5'> </span>dogImage = </span><span |
| style='color:navy'>null</span><span style='color:black'>;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:5'> </span>dogPhoto.redraw();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>});<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Group ownerInfo = </span><span |
| style='color:navy'>new</span><span style='color:black'> Group(shell, SWT.NULL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>ownerInfo.setText(</span><span |
| style='color:teal'>"Owner Info"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridLayout = </span><span |
| style='color:navy'>new</span><span style='color:black'> GridLayout();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridLayout.numColumns = 2;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>ownerInfo.setLayout(gridLayout);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> GridData(GridData.HORIZONTAL_ALIGN_FILL);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.horizontalSpan = 2;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>ownerInfo.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>new</span><span |
| style='color:black'> Label(ownerInfo, SWT.NULL).setText(</span><span |
| style='color:teal'>"Name:"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>ownerName = </span><span |
| style='color:navy'>new</span><span style='color:black'> Text(ownerInfo, |
| SWT.SINGLE | SWT.BORDER);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>ownerName.setLayoutData(</span><span |
| style='color:navy'>new</span><span style='color:black'> GridData(GridData.FILL_HORIZONTAL));<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>new</span><span |
| style='color:black'> Label(ownerInfo, SWT.NULL).setText(</span><span |
| style='color:teal'>"Phone:"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>ownerPhone = </span><span |
| style='color:navy'>new</span><span style='color:black'> Text(ownerInfo, |
| SWT.SINGLE | SWT.BORDER);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>ownerPhone.setLayoutData(</span><span |
| style='color:navy'>new</span><span style='color:black'> |
| GridData(GridData.FILL_HORIZONTAL));<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Button enter = </span><span |
| style='color:navy'>new</span><span style='color:black'> Button(shell, |
| SWT.PUSH);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>enter.setText(</span><span |
| style='color:teal'>"Enter"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData = </span><span style='color: |
| navy'>new</span><span style='color:black'> |
| GridData(GridData.HORIZONTAL_ALIGN_END);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>gridData.horizontalSpan = 3;<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>enter.setLayoutData(gridData);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>enter.addSelectionListener(</span><span |
| style='color:navy'>new</span><span style='color:black'> SelectionAdapter() {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:navy'>public</span><span |
| style='color:black'> </span><span style='color:navy'>void</span><span |
| style='color:black'> widgetSelected(SelectionEvent event) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>System.out.println(</span><span |
| style='color:teal'>"\nDog Name: "</span><span style='color:black'> + |
| dogName.getText());<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>System.out.println(</span><span |
| style='color:teal'>"Dog Breed: "</span><span style='color:black'> + |
| dogBreed.getText());<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>System.out.println(</span><span |
| style='color:teal'>"Owner Name: "</span><span style='color:black'> + |
| ownerName.getText());<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>System.out.println(</span><span |
| style='color:teal'>"Owner Phone: "</span><span style='color:black'> + |
| ownerPhone.getText());<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>System.out.println(</span><span |
| style='color:teal'>"Categories:"</span><span style='color:black'>);<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>String cats[] = |
| categories.getSelection();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span></span><span style='color:navy'>for</span><span |
| style='color:black'> (</span><span style='color:navy'>int</span><span |
| style='color:black'> i = 0; i < cats.length; i++) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:5'> </span>System.out.println(</span><span |
| style='color:teal'>"\t"</span><span style='color:black'> + cats[i]);</span><span |
| style='color:teal'><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:4'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>});<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span><o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>shell.pack();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>shell.open();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>while</span><span |
| style='color:black'> (!shell.isDisposed()) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span></span><span style='color:navy'>if</span><span |
| style='color:black'> (!display.readAndDispatch()) display.sleep();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span></span><span style='color:navy'>if</span><span |
| style='color:black'> (dogImage != </span><span style='color:navy'>null</span><span |
| style='color:black'>) {<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:3'> </span>dogImage.dispose();<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'><span |
| style='mso-tab-count:1'> </span>}<o:p></o:p></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='color:black'>}<o:p></o:p></span></p> |
| |
| <span style='font-size:12.0pt;mso-bidi-font-size:10.0pt;font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman";mso-ansi-language:EN-US;mso-fareast-language: |
| EN-US;mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always'> |
| </span> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>Here is what the window looks |
| like after Mary Smith enters Fifi in the dog show:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoHeader align=center style='margin-left:17.0pt;text-align:center; |
| tab-stops:.5in center 3.0in right 6.0in'><!--[if gte vml 1]><v:shape id="_x0000_i1094" |
| type="#_x0000_t75" style='width:210.75pt;height:204.75pt' fillcolor="window"> |
| <v:imagedata src="./files/image071.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=281 height=273 |
| src="./files/image072.jpg" v:shapes="_x0000_i1094"><![endif]></p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'>If |
| this window is resized larger, the layout adjusts as follows:</p> |
| |
| <p class=Code style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoHeader align=center style='margin-left:17.0pt;text-align:center; |
| tab-stops:.5in center 3.0in right 6.0in'><!--[if gte vml 1]><v:shape id="_x0000_i1095" |
| type="#_x0000_t75" style='width:247.5pt;height:235.5pt' fillcolor="window"> |
| <v:imagedata src="./files/image073.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=330 height=314 |
| src="./files/image074.jpg" v:shapes="_x0000_i1095"><![endif]></p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'>Notice |
| the following:</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>There are 3 columns and 7 rows.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>dogPhoto</b> |
| <i style='mso-bidi-font-style:normal'>Canvas</i> grew wider and taller because |
| it is filling and grabbing horizontally and vertically (we did not resize the <i |
| style='mso-bidi-font-style:normal'>Image</i>, but we could have).</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>dogBreed</b> |
| <i style='mso-bidi-font-style:normal'>Combo</i> grew wider because it is |
| filling horizontally, and it is in the same column as the <i style='mso-bidi-font-style: |
| normal'>Canvas</i>.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>dogName</b> <i |
| style='mso-bidi-font-style:normal'>Text</i> grew wider because it is filling |
| horizontally, and one of the columns it spans is the column containing the <i |
| style='mso-bidi-font-style:normal'>Canvas</i>.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>categories</b> |
| <i style='mso-bidi-font-style:normal'>List</i> grew taller because it is |
| filling vertically, and it spans the same rows that the <i style='mso-bidi-font-style: |
| normal'>Canvas</i> does.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Because the <b style='mso-bidi-font-weight:normal'>categories</b> |
| <i style='mso-bidi-font-style:normal'>List</i> grew taller, its vertical |
| scrollbar disappeared (it did not grow wider).</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>ownerInfo</b> |
| <i style='mso-bidi-font-style:normal'>Group</i> grew wider because it is |
| filling horizontally, and one of the columns it spans is the column containing |
| the <i style='mso-bidi-font-style:normal'>Canvas</i>.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>ownerInfo</b> |
| <i style='mso-bidi-font-style:normal'>Group</i>, as a subclass of <i |
| style='mso-bidi-font-style:normal'>Composite</i>, has its own <i |
| style='mso-bidi-font-style:normal'>GridLayout</i> with 2 columns and 2 rows.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>ownerName</b> |
| and <b style='mso-bidi-font-weight:normal'>ownerPhone</b> <i style='mso-bidi-font-style: |
| normal'>Texts</i> grew wider because the <i style='mso-bidi-font-style:normal'>Group</i> |
| grew wider, and they are filling and grabbing horizontally in the <i |
| style='mso-bidi-font-style:normal'>Group</i>s <i style='mso-bidi-font-style: |
| normal'>GridLayout</i>.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>browse</b> |
| and <b style='mso-bidi-font-weight:normal'>delete</b> <i style='mso-bidi-font-style: |
| normal'>Buttons</i> are indented slightly, and because they both fill |
| horizontally, they are the same width.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>delete</b> <i |
| style='mso-bidi-font-style:normal'>Button</i> is vertically aligned at the top |
| of its row.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The Categories <i style='mso-bidi-font-style:normal'>Label</i> |
| is centered over the <b style='mso-bidi-font-weight:normal'>categories</b> <i |
| style='mso-bidi-font-style:normal'>List</i>.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>enter</b> <i |
| style='mso-bidi-font-style:normal'>Button</i> is horizontally aligned to the |
| right of the 3 columns it spans.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>dogPhoto</b> |
| <i style='mso-bidi-font-style:normal'>Canvas</i> was created with width and |
| height hints because we want the <i style='mso-bidi-font-style:normal'>Image</i> |
| to be 80 pixels x 80 pixels, if possible.</p> |
| |
| <p class=MsoHeader style='margin-left:53.0pt;text-indent:-.25in;mso-list:l1 level1 lfo6; |
| tab-stops:list .5in center 3.0in right 6.0in'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>The <b style='mso-bidi-font-weight:normal'>categories</b> |
| <i style='mso-bidi-font-style:normal'>List</i> was created with a height hint |
| that was based on the <i style='mso-bidi-font-style:normal'>List</i>s font |
| times 12, because we want try to get the <i style='mso-bidi-font-style:normal'>List</i> |
| to show 12 items initially.</p> |
| |
| <span style='font-size:18.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h2 style='margin-left:17.0pt'><a name="_Toc509864548">Writing Your Own Layout |
| Class</a></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><a name="_Toc496069428"></a><a |
| name="_Toc496069785"><span style='mso-bookmark:_Toc496069428'>Occasionally, you |
| may want to write your own <i style='mso-bidi-font-style:normal'>Layout</i> |
| class. Perhaps your layout needs are very complex. Maybe you have the same look |
| in many places, and you want to take advantage of code reuse. Or you want to |
| leverage domain knowledge to create a very efficient layout class. Whatever the |
| reason, there are things to consider before writing a new class:</span></a></p> |
| |
| <p class=MsoNormal style='margin-left:71.0pt;text-indent:-.25in;mso-list:l2 level1 lfo8; |
| tab-stops:list .75in'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportLists]><span style='font-family: |
| Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Can the layout be done using a <i style='mso-bidi-font-style: |
| normal'>GridLayout</i>, with maybe a few nested layouts?</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:71.0pt;text-indent:-.25in;mso-list:l2 level1 lfo8; |
| tab-stops:list .75in'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportLists]><span style='font-family: |
| Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Can the desired effect be more easily achieved with a |
| resize listener?</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:71.0pt;text-indent:-.25in;mso-list:l2 level1 lfo8; |
| tab-stops:list .75in'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportLists]><span style='font-family: |
| Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Are you defining a general layout algorithm or just |
| positioning widgets?</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>Unless you are writing a very generic <i |
| style='mso-bidi-font-style:normal'>Layout</i> type that will be used by several |
| <i>Composite</i> widgets, it is often better and easier to simply calculate |
| sizes and position children in a resize listener. Many of the SWT custom |
| widgets were written this way. Although a new widget can be implemented as a <i |
| style='mso-bidi-font-style:normal'>Composite</i>/<i style='mso-bidi-font-style: |
| normal'>Layout</i> pair, implementing it as a <i style='mso-bidi-font-style: |
| normal'>Composite</i> that does its layout in a resize listener and computes |
| its preferred size in <b style='mso-bidi-font-weight:normal'>computeSize</b> is |
| clearer, and does not involve writing an extra class.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>First, we will look at how layouts work, and |
| then we will create a new <i style='mso-bidi-font-style:normal'>Layout</i> |
| class. Another example of writing your own <i style='mso-bidi-font-style:normal'>Layout</i> |
| can be found in the <i style='mso-bidi-font-style:normal'>Compound Widget |
| Example</i> section of <i style='mso-bidi-font-style:normal'>Creating Your Own |
| Widgets Using SWT</i>, which shows how to achieve the same look using either a |
| resize listener or a new <i style='mso-bidi-font-style:normal'>Layout</i> |
| class.</span></span></p> |
| |
| <h3 style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><a name="_Toc509864549">How Layouts Work</a></span></span></h3> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><i style='mso-bidi-font-style:normal'>Layout</i> |
| is the abstract superclass of all layouts. It only has two methods: <b |
| style='mso-bidi-font-weight:normal'>computeSize</b> and <b style='mso-bidi-font-weight: |
| normal'>layout</b>. The class is defined as follows:</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>public abstract |
| class</span><span style='color:black'> Layout {<o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>protected abstract</span><span style='color:black'> Point |
| computeSize(<o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:black'><span |
| style='mso-tab-count:2'> </span>Composite composite, </span><span |
| style='color:navy'>int</span><span style='color:black'> widthHint, </span><span |
| style='color:navy'>int </span><span style='color:black'>heightHint, </span><span |
| style='color:navy'>boolean</span><span style='color:black'> flushCache);<o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>protected abstract void</span><span style='color:black'> |
| layout(Composite composite, </span><span style='color:navy'>boolean</span><span |
| style='color:black'> flushCache);<o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:black'>}<o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>The <b>computeSize</b> method calculates the |
| width and height of a rectangle that encloses all of the <i>Composite</i>s |
| children once they have been sized and placed according to the layout algorithm |
| encoded in the <i>Layout</i> class. The hint parameters allow the width and/or |
| height to be constrained. For example, a layout may choose to grow in one |
| dimension if constrained in another. A hint of </span></span><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><span |
| style='font-size:9.0pt;mso-bidi-font-size:10.0pt;font-family:"Courier New"; |
| mso-bidi-font-family:"Times New Roman";layout-grid-mode:line'>SWT.DEFAULT</span> |
| means to use the preferred size.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>The <b>layout</b> method positions and sizes |
| the <i>Composite</i>s children. A <i>Layout</i> can choose to cache layout-related |
| information, such as the preferred extent of each of the children. The <b>flushCache</b> |
| parameter tells the <i>Layout</i> to flush cached data.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>Since a <i style='mso-bidi-font-style:normal'>Layout</i> |
| controls the size and placement of widgets in a <i style='mso-bidi-font-style: |
| normal'>Composite</i>, there are several methods in <i style='mso-bidi-font-style: |
| normal'>Composite</i> that are used with <i style='mso-bidi-font-style:normal'>Layout</i>s.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>The first two methods allow setting and |
| getting a <i>Layout</i> object in a <i>Composite</i>.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> <span style='color:navy'>void</span> |
| setLayout(Layout layout);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> Layout getLayout();</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>An application can force a <i>Layout</i> to recalculate |
| the sizes of and reposition children by sending <b>layout()</b> to the parent <i>Composite</i>.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> <span style='color:navy'>void</span> |
| layout(<span style='color:navy'>boolean</span> changed);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> <span style='color:navy'>void</span> |
| layout();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:maroon'>// calls layout(true);<o:p></o:p></span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>You would do this after changing anything |
| about the children that might affect their size or position, such as changing |
| the font of a child, changing the text or image of a child, adding a new child, |
| adding children to a child, etc. (If the child can accommodate the change, then |
| layout may not be necessary for example, changing the font or text of a |
| scrollable multi-line <i>Text</i>). Since these changes are done |
| programmatically, they do not cause events to happen. Consequently, the parent |
| doesnt know about the changes, and has to be told through the <b>layout</b> |
| method. This strategy reduces flash because the application can make several |
| changes and then tell the parent to layout, and the children are only redrawn |
| once instead of once per change. If <b>layout()</b> is not called and changes |
| are made after the shell is opened, then the children may not be correctly laid |
| out until the shell is somehow resized. Note that <b>shell.open()</b> causes a |
| layout to occur.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>The <b>computeSize</b> methods of a <i>Composite</i> |
| calculate the Composites preferred size, which is the size of its client area |
| as determined by the <i>Layout</i>, plus its trim.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> </span><span style='mso-bookmark:_Toc496069785'>Point</span><span style="color: navy"> |
| </span><span |
| style='mso-bookmark:_Toc496069428'>computeSize(<span style='color:navy'>int</span> |
| widthHint, <span |
| style='color:navy'>int</span> heightHint, <span style='color:navy'>boolean</span> |
| changed);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> </span><span style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069785'>Point</span><span style="color: navy"> |
| </span><span |
| style='mso-bookmark:_Toc496069428'></span></span><span |
| style='mso-bookmark:_Toc496069428'>computeSize(<span style='color:navy'>int</span> |
| widthHint, <span |
| style='color:navy'>int</span> heightHint);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:maroon'>// calls computeSize(widthHint, heightHint, true);<o:p></o:p></span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>The <b>clientArea</b> of a <i>Composite</i> |
| is the rectangle that will contain all of the children. A <i>Layout</i> |
| positions the children inside the client area.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bidi-font-family:"Courier New"'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='font-size:10.0pt;mso-bidi-font-family: |
| "Courier New";color:#000084'><span style='mso-tab-count:1'> </span>public</span></span></span><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><span |
| style='font-size:10.0pt;mso-bidi-font-family:"Courier New";color:black'> |
| Rectangle getClientArea ();<o:p></o:p></span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>The <b>trim</b> of a <i>Composite</i> is the |
| area outside the client area. For some composites, the size of the trim is zero. |
| The trim can be computed by passing the dimensions of the client area into the |
| method <b>computeTrim</b>.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='font-size:10.0pt;mso-bidi-font-family: |
| "Courier New";color:black'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='font-size:10.0pt;mso-bidi-font-family: |
| "Courier New";color:#000084'><span style='mso-tab-count:1'> </span>public</span></span></span><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><span |
| style='font-size:10.0pt;mso-bidi-font-family:"Courier New";color:black'> |
| Rectangle computeTrim (</span></span></span><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='font-size:10.0pt;mso-bidi-font-family: |
| "Courier New";color:#000084'>int</span></span></span><span style='mso-bookmark: |
| _Toc496069785'><span style='mso-bookmark:_Toc496069428'><span style='font-size: |
| 10.0pt;mso-bidi-font-family:"Courier New";color:black'> x, </span></span></span><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><span |
| style='font-size:10.0pt;mso-bidi-font-family:"Courier New";color:#000084'>int</span></span></span><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><span |
| style='font-size:10.0pt;mso-bidi-font-family:"Courier New";color:black'> y, </span></span></span><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><span |
| style='font-size:10.0pt;mso-bidi-font-family:"Courier New";color:#000084'>int</span></span></span><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><span |
| style='font-size:10.0pt;mso-bidi-font-family:"Courier New";color:black'> width, |
| </span></span></span><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='font-size:10.0pt;mso-bidi-font-family: |
| "Courier New";color:#000084'>int</span></span></span><span style='mso-bookmark: |
| _Toc496069785'><span style='mso-bookmark:_Toc496069428'><span style='font-size: |
| 10.0pt;mso-bidi-font-family:"Courier New";color:black'> height);<o:p></o:p></span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>Sending <b>pack</b> to a <i>Composite</i> |
| resizes it to its preferred size.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bidi-font-family:"Courier New"'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> <span style='color:navy'>void</span> |
| pack(<span style='color:navy'>boolean</span> changed);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:maroon'>// calls setSize(computeSize(SWT.DEFAULT, SWT.DEFAULT, |
| changed));</span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>public</span> <span style='color:navy'>void</span> |
| pack();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:maroon'>// calls pack(true);</span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'>The |
| boolean parameter to the <b style='mso-bidi-font-weight:normal'>layout</b>, <b |
| style='mso-bidi-font-weight:normal'>computeSize</b>, and <b style='mso-bidi-font-weight: |
| normal'>pack</b> methods is the <b style='mso-bidi-font-weight:normal'>changed</b> |
| flag. If <b style='mso-bidi-font-weight:normal'>true</b>, it indicates that the |
| <i>Composite</i>s contents have changed in some way that affects its preferred |
| size, therefore any caches that the <i style='mso-bidi-font-style:normal'>Layout</i> |
| may have been keeping need to be flushed. When a <i style='mso-bidi-font-style: |
| normal'>Composite</i> is resized, it asks its <i style='mso-bidi-font-style: |
| normal'>Layout</i> to lay out its children by calling layout(<span |
| style='color:navy'>false</span>); therefore widget content caches are <i |
| style='mso-bidi-font-style:normal'>not</i> flushed. This lets the <i |
| style='mso-bidi-font-style:normal'>Layout</i> perform any expensive |
| calculations only when necessary.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt;mso-list:skip'><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'>Caching |
| can increase performance, but it can also be tricky. You can choose not to |
| cache at all in fact, it is best not to try caching until your code is |
| stable. When considering what to cache, be certain not to store any widget |
| state, such as the text of a label, or the number of items in a list. </span></span></p> |
| |
| <span style='font-size:14.0pt;font-family:Arial;mso-fareast-font-family:"Times New Roman"; |
| mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'><br |
| clear=all style='page-break-before:always'> |
| </span> |
| |
| <h3 style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><a name="_Toc509864550">Custom Layout |
| Example</a></span></span></h3> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>If you have several vertically oriented <i |
| style='mso-bidi-font-style:normal'>Composite</i> widgets in your application, |
| you might choose to write <i style='mso-bidi-font-style:normal'>ColumnLayout</i>. |
| We will show a simple version of a <i style='mso-bidi-font-style:normal'>Layout</i> |
| class that lays out <i style='mso-bidi-font-style:normal'>Composite</i> |
| children into a single column. The class has fixed margins and spacing. |
| Children are given the same width, but they take their natural height.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>The code for the <i style='mso-bidi-font-style: |
| normal'>ColumnLayout</i> class is below. Note that we cache the width of the |
| widest child, and the sum of the child heights (plus spacing), and these values |
| are used to compute the size and lie out the children. They are recalculated if |
| <b style='mso-bidi-font-weight:normal'>flushCache</b> is <b style='mso-bidi-font-weight: |
| normal'>true</b>.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.graphics.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.widgets.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.layout.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>public</span> <span |
| style='color:navy'>class</span> ColumnLayout <span style='color:navy'>extends</span> |
| Layout {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:maroon'>// fixed margin and spacing<o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>public</span> <span style='color:navy'>static</span> <span |
| style='color:navy'>final</span> <span style='color:navy'>int</span> MARGIN = 4;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>public</span> <span style='color:navy'>static</span> <span |
| style='color:navy'>final</span> <span style='color:navy'>int</span> SPACING = |
| 2;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:maroon'>// cache<o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>Point |
| [] sizes;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>int</span> maxWidth, totalHeight;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>protected</span> |
| Point computeSize(Composite composite, <span style='color:navy'>int</span> |
| wHint, <span style='color:navy'>int</span> hHint, <span style='color:navy'>boolean</span> |
| flushCache) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>Control |
| children[] = composite.getChildren();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>if</span> (flushCache || sizes == <span style='color:navy'>null</span> |
| || sizes.length != children.length) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>initialize(children);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>int</span> width = wHint, height = hHint;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>if</span> (wHint == SWT.DEFAULT) width = maxWidth;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>if</span> (hHint == SWT.DEFAULT) height = totalHeight;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>return</span> <span style='color:navy'>new</span> Point(width |
| + 2 * MARGIN, height + 2 * MARGIN);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>protected</span> <span |
| style='color:navy'>void</span> layout(Composite composite, <span |
| style='color:navy'>boolean</span> flushCache) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>Control |
| children[] = composite.getChildren();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>if</span> (flushCache || sizes == <span style='color:navy'>null</span> |
| || sizes.length != children.length) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>initialize(children);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>Rectangle |
| rect = composite.getClientArea();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>int</span> x = MARGIN, y = MARGIN;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>int</span> width = Math.max(rect.width - 2 * MARGIN, |
| maxWidth);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>for</span> (<span style='color:navy'>int</span> i = 0; i |
| < children.length; i++) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>int</span> height = sizes[i].y;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>children[i].setBounds(x, |
| y, width, height);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='mso-tab-count:1'> </span>y += height + SPACING;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>void</span> |
| initialize(Control children[]) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>maxWidth |
| = 0;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>totalHeight |
| = 0;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>sizes |
| = <span style='color:navy'>new</span> Point [children.length];</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>for</span> (<span style='color:navy'>int</span> i = 0; i |
| < children.length; i++) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>sizes[i] |
| = children[i].computeSize(SWT.DEFAULT, SWT.DEFAULT, <span style='color:navy'>true</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>maxWidth |
| = Math.max(maxWidth, sizes[i].x);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>totalHeight |
| += sizes[i].y;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>totalHeight |
| += (children.length - 1) * SPACING;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>}</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>Here is some simple test code to test the <i |
| style='mso-bidi-font-style:normal'>ColumnLayout</i>. The <b style='mso-bidi-font-weight: |
| normal'>grow</b> and <b style='mso-bidi-font-weight:normal'>shrink</b> <i |
| style='mso-bidi-font-style:normal'>Buttons</i> show a call to the <i |
| style='mso-bidi-font-style:normal'>Shell</i>s <b style='mso-bidi-font-weight: |
| normal'>layout()</b> method to force a re-layout after changing the width of |
| one of the children. Calling <b style='mso-bidi-font-weight:normal'>layout()</b> |
| is the same as calling <b style='mso-bidi-font-weight:normal'>layout(true</b>) |
| which tells the <i style='mso-bidi-font-style:normal'>ColumnLayout</i> to flush |
| its caches before setting the bounds of the children. The <i style='mso-bidi-font-style: |
| normal'>Shell</i> is also told to <b style='mso-bidi-font-weight:normal'>pack()</b> |
| after laying out the children. This forces the <i style='mso-bidi-font-style: |
| normal'>Shell</i> to take the new size.</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.widgets.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.layout.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>import</span> |
| org.eclipse.swt.events.*;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='color:navy'>public</span> <span |
| style='color:navy'>class</span> ColumnLayoutTest {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>static</span> Shell shell;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>static</span> Button button3;</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span><span |
| style='color:navy'>public</span> <span style='color:navy'>static</span> <span |
| style='color:navy'>void</span> main(String[] args) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>Display |
| display = <span style='color:navy'>new</span> Display();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>shell |
| = <span style='color:navy'>new</span> Shell(display);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>shell.setLayout(<span |
| style='color:navy'>new</span> ColumnLayout());</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"B1"</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>new</span> Button(shell, SWT.PUSH).setText(<span |
| style='color:teal'>"Very Wide Button 2"</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>(button3 |
| = <span style='color:navy'>new</span> Button(shell, SWT.PUSH)).setText(<span |
| style='color:teal'>"Button 3"</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>Button |
| grow = <span style='color:navy'>new</span> Button(shell, SWT.PUSH);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>grow.setText(<span |
| style='color:teal'>"Grow Button 3"</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>grow.addSelectionListener(<span |
| style='color:navy'>new</span> SelectionAdapter() {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:3'> </span><span |
| style='color:navy'>public</span> <span style='color:navy'>void</span> widgetSelected(SelectionEvent |
| e) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:4'> </span>button3.setText(<span |
| style='color:teal'>"Extreemely Wide Button 3"</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:4'> </span>shell.layout();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:4'> </span>shell.pack();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:3'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>});</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>Button |
| shrink = <span style='color:navy'>new</span> Button(shell, SWT.PUSH);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>shrink.setText(<span |
| style='color:teal'>"Shrink Button 3"</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>shrink.addSelectionListener(<span |
| style='color:navy'>new</span> SelectionAdapter() {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:3'> </span><span |
| style='color:navy'>public</span> <span style='color:navy'>void</span> |
| widgetSelected(SelectionEvent e) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:4'> </span>button3.setText(<span |
| style='color:teal'>"Button 3"</span>);</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:4'> </span>shell.layout();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:4'> </span>shell.pack();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:3'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>});</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>shell.pack();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>shell.open();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span><span |
| style='color:navy'>while</span> (!shell.isDisposed()) {</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:3'> </span><span |
| style='color:navy'>if</span> (!display.readAndDispatch()) display.sleep();</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:2'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-tab-count:1'> </span>}</span></span></p> |
| |
| <p class=Code style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>}</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>If we run the test code, the window on the |
| left appears. Pressing the </span></span><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='font-size:9.0pt;mso-bidi-font-size: |
| 10.0pt;font-family:"Courier New";mso-bidi-font-family:"Times New Roman"; |
| layout-grid-mode:line'>Grow Button 3</span> button results in the window on the |
| right. Resizing the window with the mouse will also make the buttons wider (or |
| narrower) but they do not grow taller.</span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><!--[if gte vml 1]><v:shape |
| id="_x0000_i1096" type="#_x0000_t75" style='width:88.5pt;height:107.25pt' |
| fillcolor="window"> |
| <v:imagedata src="./files/image075.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=118 height=143 |
| src="./files/image076.jpg" v:shapes="_x0000_i1096"><![endif]><span |
| style='mso-tab-count:1'> </span><!--[if gte vml 1]><v:shape id="_x0000_i1097" |
| type="#_x0000_t75" style='width:111pt;height:107.25pt' fillcolor="window"> |
| <v:imagedata src="./files/image077.png" o:title=""/> |
| </v:shape><![endif]--><![if !vml]><img width=148 height=143 |
| src="./files/image078.jpg" v:shapes="_x0000_i1097"><![endif]></span></span></p> |
| |
| <p class=MsoNormal align=center style='margin-left:17.0pt;text-align:center'><span |
| style='mso-bookmark:_Toc496069785'><span style='mso-bookmark:_Toc496069428'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></p> |
| |
| <h3 style='margin-left:17.15pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'>Overriding Composite</span></span></h3> |
| |
| <p class=MsoNormal style='margin-left:17.15pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><a name="_Toc509864551">If you are writing |
| your own widget, as outlined in <i style='mso-bidi-font-style:normal'>Creating |
| Your Own Widgets Using SWT</i>, and you subclass <i>Composite</i>, then here |
| are a few points to consider for your implementation:</a></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:35.15pt;text-indent:-.25in;mso-list:l5 level1 lfo10; |
| tab-stops:list 26.65pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>If you are providing trimmings in your new <i>Composite</i>, |
| make sure to override both <b>computeTrim</b> and <b>getClientArea</b>.</span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:35.15pt;text-indent:-.25in;mso-list:l5 level1 lfo10; |
| tab-stops:list 26.65pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Never override <b>layout()</b>, but you may override <b>layout(boolean)</b>.</span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.15pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.15pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'>Sometimes |
| you want your new <i>Composite</i> to have a specific look, and you dont want |
| the application to be able to specify a layout. Your new <i>Composite</i> would |
| either do its layout in a resize handler or using a private custom layout. In |
| either case, you will probably want to do the following:</span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:35.15pt;text-indent:-.25in;mso-list:l4 level1 lfo12; |
| tab-stops:list 26.65pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Override <b>setLayout</b> to do nothing.</span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:35.15pt;text-indent:-.25in;mso-list:l4 level1 lfo12; |
| tab-stops:list 26.65pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Override <b>layout(boolean)</b> to call your layout |
| code.</span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:35.15pt;text-indent:-.25in;mso-list:l4 level1 lfo12; |
| tab-stops:list 26.65pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'><![if !supportLists]><span |
| style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'> |
| </span></span><![endif]>Override <b>computeSize</b> to correctly compute the |
| size of your <i>Composite</i>.</span></span></span></p> |
| |
| <p class=MsoNormal style='margin-left:17.15pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'><![if !supportEmptyParas]> <![endif]><o:p></o:p></span></span></span></p> |
| |
| <h2 style='margin-left:17.0pt'><span style='mso-bookmark:_Toc496069785'><span |
| style='mso-bookmark:_Toc496069428'><span style='mso-bookmark:_Toc509864551'>Summary</span></span></span></h2> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>SWT provides several different |
| ways to lay out widgets. The simplest method, and the one you will typically |
| use, is to use one of the standard <i style='mso-bidi-font-style:normal'>Layout</i> |
| classes: <i style='mso-bidi-font-style:normal'>FillLayout</i>, <i |
| style='mso-bidi-font-style:normal'>RowLayout</i>, or <i style='mso-bidi-font-style: |
| normal'>GridLayout</i>.</p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| <p class=MsoNormal style='margin-left:17.0pt'>In certain cases you may want to |
| write your own <i style='mso-bidi-font-style:normal'>Layout</i> class to |
| provide a very specific look or to reuse very similar layout code, but often a |
| resize listener on the parent widget will suffice.</p> |
| |
| <p class=MsoHeader style='margin-left:17.0pt;tab-stops:.5in center 3.0in right 6.0in'><![if !supportEmptyParas]> <![endif]><o:p></o:p></p> |
| |
| </div> |
| |
| </body> |
| |
| </html> |