亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > SWT布局深入學習

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

對于Window編程來說, 我們一般不會涉及到布局這個概念,因為基本上我們都是直接設置控件的大小, 位置等布局信息, 但是對于java來說就不一樣了, 它涉及到跨平臺的問題, 控件的位置和大小不是由它本身來控制的,因此我們不會看到控件有x, y, width, height等屬性,而必須通過外面LayoutData和Layout來控制控件的位置和大小,這個是使用Java進行客戶端編程必須轉變的一個觀念,當然這個也不是絕對,后面我們也會看到不使用布局的做法,但是我們一般不提倡這樣做

Layout可以理解為它是控件和其所在容器之間的一層抽象, 它決定了控件在容器中的位置, 而且它是與平臺無關的, 它會根據容器大小的變動來調整控件的尺寸.而且容器只能設置一種布局方式, 其包含的控件的布局是不依賴其他容器的

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

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

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

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

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

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

不使用布局
如果你不要面對垮平臺,以及根據布局自動調整容器中的控件,那么也可以不通過布局來確定控件的位置和大小,通過自定義我們知道,布局都是通過調用里面控件的setBounds方法來確定控件的位置的,所以我們要做的就是直接調用控件的setBunds方法而已.

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢
相關熱詞搜索:布局 學習
亚洲人成网站在线播放2019 _日韩国产欧美精品_久久夜色精品国产欧美乱_在线视频福利一区
国产精品一区二区电影| 隔壁老王国产在线精品| 麻豆av一区二区三区久久| 国产suv精品一区二区| 亚洲熟妇无码一区二区三区| 国产日韩欧美视频| 国产精品久久久久久久久久ktv| 日韩视频在线免费看| 91精品国产一区二区三区动漫| 欧美激情亚洲综合一区 | 久久九九视频| 亚洲乱码一区二区三区三上悠亚| 国产欧美亚洲日本| 久久中文字幕在线视频| 国产中文字幕免费观看| 国产精品观看在线亚洲人成网| 欧美日韩视频免费在线观看 | 91久久久久久久久久久久久| 欧美精品九九久久| 国产日韩欧美在线观看| 精品国产一区av| 欧美日韩精品免费看| 久久国产一区二区三区| 欧美精品欧美精品| 国产精品久久7| 国产毛片视频网站| 色与欲影视天天看综合网| 国产嫩草一区二区三区在线观看| 欧美日韩aaaa| 99在线观看视频| 亚洲综合av一区| 国产精品999| 日韩免费在线视频| 国产精品色午夜在线观看| 国产一区二区三区在线免费| 国产精品激情av在线播放| 国产日韩精品在线| 一区中文字幕在线观看| 91久久精品国产| 日韩欧美在线免费观看视频| 北条麻妃久久精品| 国产在线视频欧美一区二区三区| 精品国产二区在线| 91精品中文在线| 日韩精品一区二区三区外面| 国产精品欧美激情| 成人免费福利视频| 日韩精品免费播放| 另类天堂视频在线观看| 97久久精品视频| 欧美一区二区三区四区在线| 久久精品2019中文字幕| 国产奶头好大揉着好爽视频| 亚洲精品无人区| 波霸ol色综合久久| 国产精品一区在线免费观看| 日本毛片在线免费观看| 久久综合亚洲社区| 久久久人成影片一区二区三区观看| 日本精品www| 欧美乱人伦中文字幕在线| 97成人在线免费视频| 欧美精品久久| 亚洲精品日韩av| 国产精品视频不卡| 国产视频观看一区| 日韩av在线播放不卡| 欧美精品亚州精品| 久久黄色免费看| 国产男女在线观看| 欧美日韩激情四射| 午夜精品久久久久久99热 | 久久精品日产第一区二区三区乱码| 欧美日本韩国在线| 亚洲精品国产精品国自产观看| 久久精品国产2020观看福利| 99久久久精品免费观看国产| 热re99久久精品国产66热| 欧美激情免费在线| 国产精品偷伦一区二区| 久久亚洲中文字幕无码| 国产免费一区二区三区在线观看| 青青视频免费在线观看| 欧美一区二区三区艳史| 国产99久久精品一区二区 夜夜躁日日躁| 国产成人亚洲综合| 国产精品一区二区三区成人| 激情五月五月婷婷| 日韩人妻无码精品久久久不卡| 亚洲直播在线一区| 欧美久久精品午夜青青大伊人| 久久久久久国产三级电影| 日本91av在线播放| 在线观看亚洲视频啊啊啊啊| 国产成人aa精品一区在线播放| 国产免费一区二区三区| 人人澡人人澡人人看欧美| 久久999免费视频| 国产黄色一级网站| 国产日韩第一页| 日本午夜在线亚洲.国产| 九九久久国产精品| 国产成人久久婷婷精品流白浆| 99亚洲国产精品| 国产综合av在线| 国语自产精品视频在线看一大j8| 亚洲国产日韩美| 国产精品夫妻激情| 久久久久久久久一区二区| 国产剧情日韩欧美| 欧美激情国产精品日韩| 无码少妇一区二区三区芒果| 精品久久免费观看| www.日韩不卡电影av| 91精品视频播放| 国产日韩欧美大片| 国内伊人久久久久久网站视频| 日本精品一区| 午夜精品一区二区在线观看的| 中文字幕日韩精品一区二区| 国产精品久久久久久久7电影| 久久福利电影| 国产精品91免费在线| 国产午夜精品视频一区二区三区| 人妻精品无码一区二区三区| 性欧美大战久久久久久久| 正在播放国产精品| 久久综合电影一区| 国产精品久久久久久久一区探花 | 日韩午夜视频在线观看| 亚洲va欧美va在线观看| 一女被多男玩喷潮视频| 久久97精品久久久久久久不卡| 国产精品免费小视频| 97碰在线视频| 国产精品444| 91精品国产99| 91精品国产自产在线老师啪| 成人精品视频一区二区| 国产精品亚洲天堂| 成人免费xxxxx在线观看| 国产欧美一区二区视频| 成人久久18免费网站图片| 国产伦精品一区二区三区四区视频| 国产一区二区精品在线| 国产原创精品| 国产欧美一区二区三区四区| 国产免费一区二区| 免费在线国产精品| 精品日韩欧美| 国产一二三四区在线观看| 国精产品一区一区三区有限在线| 精品视频一区二区在线| 国产一区二区四区| 国产欧美一区二区三区在线看| 国产日韩欧美视频在线| 国产精品一线二线三线| 91久久中文字幕| 久久福利电影| 国产精品99久久免费黑人人妻| 久久这里只有精品23| 久久久久久香蕉网| 国产精品三级一区二区| 久久国产精品首页| 美女黄色丝袜一区| 亚洲欧洲三级| 日本www在线播放| 黄黄视频在线观看| 国产精品一区二区三区免费视频| 97免费视频在线播放| 久久精品国产69国产精品亚洲| 久久这里有精品视频| 亚洲一区二区自拍| 日本不卡一区二区三区四区 | 国产精品一区二区免费在线观看| 97免费在线视频| 久无码久无码av无码| 国产成人拍精品视频午夜网站| 国产精品第二页| 亚洲精品一区二区三区四区五区| 午夜精品蜜臀一区二区三区免费| 欧美精品尤物在线| 国产精品一区二区三区在线播放| 久久久亚洲综合网站| 久久色免费在线视频| 一区二区在线高清视频| 日本不卡二区| 美日韩免费视频| 久艹在线免费观看| 精品久久久三级| 日本视频一区二区不卡| 欧美日韩大片一区二区三区| 国产精选一区二区| 九色在线视频观看| 久久99国产精品自在自在app| 欧美一级视频免费看| 免费无遮挡无码永久视频| 久久久欧美精品| 精品国产免费av| 色中文字幕在线观看|