国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费

當(dāng)前位置:首頁(yè) > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計(jì)軟件教程 > SWT布局深入學(xué)習(xí)

SWT布局深入學(xué)習(xí)
2010-01-14 23:11:41  作者:  來(lái)源:
以下內(nèi)容是學(xué)習(xí)"The Definitive Guide to SWT and JFace"(SWT/JFace權(quán)威指南)做的筆記

對(duì)于Window編程來(lái)說(shuō), 我們一般不會(huì)涉及到布局這個(gè)概念,因?yàn)榛旧衔覀兌际侵苯釉O(shè)置控件的大小, 位置等布局信息, 但是對(duì)于java來(lái)說(shuō)就不一樣了, 它涉及到跨平臺(tái)的問(wèn)題, 控件的位置和大小不是由它本身來(lái)控制的,因此我們不會(huì)看到控件有x, y, width, height等屬性,而必須通過(guò)外面LayoutData和Layout來(lái)控制控件的位置和大小,這個(gè)是使用Java進(jìn)行客戶端編程必須轉(zhuǎn)變的一個(gè)觀念,當(dāng)然這個(gè)也不是絕對(duì),后面我們也會(huì)看到不使用布局的做法,但是我們一般不提倡這樣做

Layout可以理解為它是控件和其所在容器之間的一層抽象, 它決定了控件在容器中的位置, 而且它是與平臺(tái)無(wú)關(guān)的, 它會(huì)根據(jù)容器大小的變動(dòng)來(lái)調(diào)整控件的尺寸.而且容器只能設(shè)置一種布局方式, 其包含的控件的布局是不依賴其他容器的

首先要介紹的是FillLayout, 它是所有布局中最簡(jiǎn)單的一種, 使用了該布局的容器中的所有控件將以同一尺寸放在一行或者一列中, 它有一個(gè)type屬性,用來(lái)指定布局是采用列排列還行排列, type的屬性值為SWT.HORIZONTAL和SWT_VERTICAL, 默認(rèn)情況下是行排列, 因?yàn)檫@個(gè)type是一個(gè)int常量,如果這個(gè)常量既不是水平也不是垂直的話,他們系統(tǒng)將默認(rèn)是垂直排列

接下來(lái)是RowLayout,跟FillLayout比較類似,都是按行或列排列包含在容器中的控件, 唯一不同的就是不會(huì)限制所有的控件采用同一大小, 而且如果一行或一列排列不下時(shí)會(huì)自動(dòng)換行或者換列, 在使用RowLayout的時(shí)候,還會(huì)用到RowData類, 容器中的控件將通過(guò)它來(lái)制定自己的大小, RowLayout將根據(jù)每個(gè)控件的RowData信息來(lái)決定控件在整個(gè)容器中放置的位置, RowData可以直接在構(gòu)造函數(shù)中通過(guò)width和height參數(shù)設(shè)置,也可以將width和height包裝成Point對(duì)象作為其構(gòu)造參數(shù)來(lái)設(shè)置其大小, RowLayout除了有一個(gè)跟FillLayout一樣的type屬性之外,還有另外幾個(gè)屬性需要介紹一下:
justify屬性為true表示位于同一列或者同一行中的控件之間的間距相等;
marginBottom(Left, Right, Top)設(shè)置邊距;
space指定間距;
wrap指定是否換行;

所有的布局都可以通過(guò)GridLayout來(lái)實(shí)現(xiàn), 它也是我們用的最多的布局, 它采用表格的形式來(lái)放置容器所包含的控件, numColumns是該布局最重要的屬性, 他決定了布局的結(jié)構(gòu), 所有的控件將從左到右被放在容器中, 它還有一些其他的屬性:
horizontal(vertical)Spacing指定相鄰單元格間距;
makeColumnsEqualWidth 是否強(qiáng)制同寬;
marginHeight(Width, Top, Bottom)設(shè)置指定邊距;
我們還可以結(jié)合給控件指定GridData來(lái)進(jìn)行布局, 但是GridData不能在控件之間公用, 它的一些屬性必須說(shuō)明:
grabExcessHorizontal(Vertical)Space為true的意思是指定控件所在單元格將獲取所在行(列)剩余的所有空間, 如果一行(列)有多個(gè)控件設(shè)定該屬性為true則只有第一個(gè)設(shè)置有效, 注意這里只的是cell并不是控件;
height(width)Hint設(shè)置控件的最小高(寬),注意這里指的是控件而不是單元格;
horizontal(vertical)Alignment:這個(gè)屬性用來(lái)設(shè)置控件在單元格中的對(duì)其方式,有BEGINNING(左對(duì)齊),CENTER(居中),END(右對(duì)齊),FILL(填滿整個(gè)單元格)幾個(gè)值;
horizontal(vertical)Indent:這個(gè)是用來(lái)水平(垂直)方向上設(shè)置控件到單元格之間的間隔;
horizontal(vertical)Span:是用來(lái)指定控件在水平(垂直)方向上所占用的單元格;
GridData還有一些常量需要解釋一下,BEGINNING,CENTER,END,FILL是用來(lái)設(shè)置對(duì)其方式的,不能作為構(gòu)造函數(shù)的style參數(shù), FILL_BOTH相當(dāng)于將horizontalAlignment, verticalAlignment設(shè)置為FILL加上grabExcessHorizontalSpace和grabExcessVerticalSpace設(shè)置為true, 也就是說(shuō)在構(gòu)造函數(shù)的style參數(shù)設(shè)置為該值相當(dāng)于設(shè)置了4個(gè)屬性;FILL_HORIZONTAL =  (horizontalAlignment = FILL) + (grabExcessHorizontalSpace=true); FILL_VERTICAL = (verticalAlignment = FILL) + (grabExcessVerticalSpace=true); GRAB_HORIZONTAL = (grabExcessHorizontalSpace =true); GRAB_VERTICAL = (grabExcessVerticalSpace =true), 類似HORIZONTAL_ALIGN_BEGINNING這樣的從字面都可以知道意思了

FormLayout是所有布局里面最復(fù)雜的一種, 它也使用到自己的LayoutData:FormData, 另外它還會(huì)在FormData中通過(guò)使用FromAttachment來(lái)控制關(guān)聯(lián)控件的位置, FormData可以設(shè)置四個(gè)FormAttachment實(shí)例,分別表示控件的四邊與相對(duì)控件之間的位置關(guān)系, FormAttachment有以下幾個(gè)成員變量:
alignment 用來(lái)指定關(guān)聯(lián)的控件的某個(gè)邊和相對(duì)控件之間的對(duì)齊方式, 如果關(guān)聯(lián)的是上下位置,那么可以設(shè)置SWT.TOP, SWT.CENTER, SWT.BOTTOM,是左右位置可以設(shè)置SWT.LEFT, SWT.CENTER, and SWT.RIGHT, 該屬性一般在指定的相對(duì)控件不是容器的時(shí)候使用, 否則會(huì)沒(méi)有效果;
control屬性指的是相對(duì)哪個(gè)控件,默認(rèn)情況下是指的關(guān)聯(lián)控件所在的容器;
denominator 是分母默認(rèn)是100,這個(gè)一般不設(shè)置;
numerator是分子, 這兩個(gè)值在control是關(guān)聯(lián)對(duì)象的容器的時(shí)候才有意義, 用來(lái)指定應(yīng)用的控件到容器關(guān)聯(lián)邊在整個(gè)容器中的百分比,說(shuō)白了就是相對(duì)位置;
offset是偏移量,說(shuō)白了就是關(guān)聯(lián)控件與相對(duì)控件指定邊之間的絕對(duì)位置
從FormAttachment的構(gòu)造函數(shù)我們就可以看出來(lái),一般哪些屬性是一起設(shè)置的, 比如只設(shè)置control, 同時(shí)設(shè)置control和offset, 同時(shí)設(shè)置control, offset和alignment, 只設(shè)置分母, 同時(shí)設(shè)置分母和分子, 同時(shí)設(shè)置分母分子和偏移量

StackLayout是一個(gè)用的很少的布局, 從字面意思我們可以看出來(lái), 它是將使用該布局的容器內(nèi)的所有控件位置,大小設(shè)置為相同, 然后層疊在一起,只有位于最上面控件可見(jiàn), 它使用topControl來(lái)指定哪個(gè)控件位于堆棧最上層并可見(jiàn), 如果設(shè)置為null表示所有控件均不可見(jiàn), 設(shè)置之后并調(diào)用容器的layout()方法才能使指定的控件可見(jiàn)

如何自定義布局
通過(guò)學(xué)習(xí)如何自定義布局,可以對(duì)SWT的布局實(shí)現(xiàn)做深層次的理解
自定義布局需要繼承Layout類,并實(shí)現(xiàn)compluteSize和layout方法, 關(guān)聯(lián)控件會(huì)調(diào)用compluteSize方法根據(jù)當(dāng)前控件所包含子控件的大小計(jì)算出一個(gè)最小的尺寸值,返回值是Point里面的就是高寬值,就是確定要布局的容器的作用范圍,而調(diào)用layout方法則是為容器中的每一個(gè)控件通過(guò)調(diào)用其setBounds方法來(lái)設(shè)置位置和大小, 如果需要更多的信息來(lái)幫助對(duì)控件進(jìn)行布局,那么可以自己頂一個(gè)類來(lái)封裝這些信息然后通過(guò)setLayoutData設(shè)置給control.

不使用布局
如果你不要面對(duì)垮平臺(tái),以及根據(jù)布局自動(dòng)調(diào)整容器中的控件,那么也可以不通過(guò)布局來(lái)確定控件的位置和大小,通過(guò)自定義我們知道,布局都是通過(guò)調(diào)用里面控件的setBounds方法來(lái)確定控件的位置的,所以我們要做的就是直接調(diào)用控件的setBunds方法而已.

安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
国产精品一区二区精品_久久小视频_天堂va在线观看_99久久夜色精品国产亚洲96_日本手机在线视频_av成人免费
<button id="0mgmq"><pre id="0mgmq"></pre></button>
  • <tr id="0mgmq"></tr>
  • <abbr id="0mgmq"><source id="0mgmq"></source></abbr> <button id="0mgmq"></button>
  • 精品国产免费一区二区三区| 在线观看日韩羞羞视频| 亚洲精品日韩久久| 日本不卡一区| 国产一区二区三区四区hd| 亚洲久久在线| 激情欧美一区| 欧美久久99| 亚洲一区三区视频在线观看| 免费一区二区三区| 精品无人区一区二区三区竹菊| 久久精品首页| 久久精品综合| 久久久一本精品99久久精品66| 一本色道久久综合亚洲精品不卡 | 在线亚洲成人| 国产日韩亚洲欧美精品| 99亚洲伊人久久精品影院红桃| 亚洲婷婷在线| 国产精品久久久免费| 激情91久久| 亚洲精品系列| 久久不射网站| 成人三级在线| 鲁鲁视频www一区二区| 狠狠色综合一区二区| 成人区精品一区二区| 国产精品99久久久久久久| 国产精品免费视频一区二区| 精品一区二区国产| 狠狠色噜噜狠狠色综合久| 久久99精品久久久久久三级| 鲁丝片一区二区三区| 日韩在线导航| 欧美日韩在线大尺度| 精品91视频| 久久亚洲午夜电影| 久久久久久高清| 午夜午夜精品一区二区三区文| 影音先锋亚洲视频| 精品91久久久久| 久久av一区二区三区| 久久99精品久久久久久久青青日本| 欧美一区二区三区在线播放| 亚洲欧美亚洲| 久久国产精品亚洲77777| 国产一级精品aaaaa看| 色大师av一区二区三区| 国内综合精品午夜久久资源| 麻豆九一精品爱看视频在线观看免费| 国产精品v欧美精品v日韩| 日韩欧美亚洲日产国产| 尹人成人综合网| 国产高清自拍99| 亚洲一区尤物| 噜噜噜在线观看免费视频日韩| 久久大香伊蕉在人线观看热2| 在线国产伦理一区| 91pron在线| 亚洲一区二区在线观| 日韩午夜av| 久久精品国产99精品国产亚洲性色| 欧美韩国一区| 国产欧美日韩一区| 最近看过的日韩成人| **亚洲第一综合导航网站 | 欧美一级日本a级v片| 极品av少妇一区二区| 国产欧美一区二区视频| 国产精品v欧美精品v日韩| 99re国产视频| 国产主播一区| 久久婷婷开心| 亚洲欧美日韩精品综合在线观看| 美脚丝袜一区二区三区在线观看| 激情综合自拍| 欧洲一区二区在线| 性欧美videos另类喷潮| 一区二区免费电影| 成人区精品一区二区| 激情久久一区| 亚洲国内在线| 国产精品一区二区你懂得| 在线成人国产| 亚洲一卡二卡区| 国产一区二区在线网站| 亚洲激情网址| 欧美二区视频| 久久久久久草| 超碰97在线资源| 国产精品日韩一区二区| 亚洲视频sss| 欧美激情国产日韩| av在线不卡一区| 国产日韩精品久久| 国内精品福利| 欧美激情在线| 亚洲午夜精品久久| 欧美亚洲精品日韩| 精品九九九九| 不卡视频一区| 老司机精品久久| 国产精品一区二区三区免费观看| 欧美激情1区2区| 午夜精品区一区二区三| 久久婷婷开心| 精品在线一区| 久久99精品久久久久久三级| 99三级在线| 成人av电影免费| 成人资源av| 国产91精品入口17c| 久久久蜜桃一区二区人| 欧美一进一出视频| 久久国产日本精品| 51国产成人精品午夜福中文下载| 亚洲精品一区二| 亚洲伦伦在线| 亚洲中字黄色| 久久久久久夜| 鬼打鬼之黄金道士1992林正英| 18成人免费观看网站下载| 老司机午夜免费精品视频 | 韩日精品视频| 一区在线电影| 国产毛片久久| 97se国产在线视频| 国产高清自拍99| 欧美日韩视频在线一区二区观看视频| 久草热久草热线频97精品| 欧美成熟毛茸茸复古| 日韩一二三区不卡在线视频| 亚洲欧美一区二区原创| 欧美午夜一区| 一区二区毛片| ts人妖另类在线| 欧美性天天影院| 国产综合18久久久久久| 99国产精品久久久久老师| 亚洲综合不卡| 官网99热精品| 秋霞在线观看一区二区三区| 一区二区视频在线播放| 99国内精品| 国产精品久久久久久久小唯西川| 久久国产精品久久精品国产| 亚洲高清视频一区| 91久久国产综合久久蜜月精品| 男人的天堂亚洲| 久久久99国产精品免费| 欧美成人一品| 午夜在线视频一区二区区别| 97超碰最新| 在线观看亚洲视频啊啊啊啊| 在线亚洲一区| 青青草原成人| 国产美女一区| 手机在线观看国产精品| 亚洲福利久久| 欧美极品一区二区| 一本久道久久综合狠狠爱| 国产伦精品一区二区三区视频孕妇 | 欧美一区二区视频在线| 国产日本精品| 日本高清不卡三区| 国产欧美韩日| 亚洲成人蜜桃| 97在线电影| 国产精品s色| 精品国产一区二区三| 亚洲午夜激情| 日本午夜一区二区三区| 99成人在线| 性欧美精品一区二区三区在线播放| 一本一道久久综合狠狠老精东影业| 久久久久一区二区| 99国产精品久久久久久久成人热| 蜜桃日韩视频| 母乳一区在线观看| 黄色av成人| 亚洲va韩国va欧美va精四季| 18成人在线| 99视频一区| 欧美日本韩国在线| 久久国产精品精品国产色婷婷| 91久久夜色精品国产九色| 午夜精品区一区二区三| 国产精品国产三级国产专区53| 伊人久久成人| 女女同性女同一区二区三区91| 国产高清精品一区二区| 亚洲欧美成人| 亚洲大片av| 欧美午夜精品久久久久免费视| 欧美精品久久久| 国产伦精品一区二区三区视频免费 | 97自拍视频| 男女精品视频| 国产精品一级久久久| 欧美日韩亚洲一区二区三区四区|