布局管理器課件_第1頁
布局管理器課件_第2頁
布局管理器課件_第3頁
布局管理器課件_第4頁
布局管理器課件_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Swing用戶界面組件

第9.2布局管理概述布局管理器概述

布局管理器是Java中用來控制組件排列位置的一種界面管理API。通常,組件放置在容器中,布局管理器決定容器中的組件具體放置位置和大小。

Java支持五種布局FlowLayout

流布局BorderLayout邊界布局GridLayout網(wǎng)格布局CardLayout

卡片布局Component類層次結(jié)構(gòu):ObjectComponentContainerWindowJComponentFrameDialogJFrameJDialogJPanelJTextComponentJLabelJScrollPaneJComboBoxAbstractButtonJMenuBarJTextFieldJTextAreaJMenu-ltemJToggleButtonJButton:每個(gè)容器都有一個(gè)默認(rèn)的布局管理器,但可以重新進(jìn)行設(shè)置。例如,使用下列語句:panel.setLayout(newGridLayout(4,4));這個(gè)面板將用GirdLayout類布局組件??梢酝萜髦刑砑咏M件。容器的add方法將把組件和放置的方位傳遞給布局管理器。VoidSetLayout(LayoutManagerm)為容器設(shè)置布局管理器Componentadd(Componentc)Componentadd(Componentc,Objectconstraints)1.1將組件添加到容器中,并返回組件引用。參數(shù):c要添加的組件

constraints布局管理器理解的標(biāo)示符FlowLayout()FloeLayout(intalign)FlowLayout(intalign,inthgap,intvgap)構(gòu)造一個(gè)新的FlowLayout對(duì)象。參數(shù):alignLEFT、CENTER或者RIGHT

hgap

以像素為單位的水平間距離(負(fù)值強(qiáng)行重疊) vgap

以像素為單位的垂直間距(負(fù)值強(qiáng)行重疊)

流式布局。在FlowLayout中,不必指定每個(gè)軟件的擺放位置,只要把組件加入到FlowLayout中,就會(huì)根據(jù)添加組件的順序依次擺放組件。

組件按照加入的先后順序從左向右排列,一行排滿之后就轉(zhuǎn)到下一行繼續(xù)從左向右排列,每一行中的組件都居中排列。

FlowLayout邊框布局邊框布局管理器(borderlayoutmanager)邊框布局管理器是每個(gè)JFrame的內(nèi)容窗格的默認(rèn)布局管理器。邊框布局管理器將界面分為上下左右及中間5部分,每添加一個(gè)組件就要指定組件擺放的方位。在上下左右的組件將貼邊放置,不指定擺放位置將默認(rèn)擺放在中間。如圖:構(gòu)造BorderLayout新對(duì)象BorderLayout()BorderLayout(inthgap,intvgap)參數(shù):

hgap

以像素為單位的水平間距離(負(fù)值強(qiáng)行重疊) vgap

以像素為單位的垂直間距(負(fù)值強(qiáng)行重疊)添加組件,從第一行第一列開始,然后是第一行的第二列,以此類推。panel.add(newJButton("1"));panel.add(newJButton("2"));(定義數(shù)字按鍵)GridLayout對(duì)象的定義:GridLayout(introws,intcolumn)GridLayout(introws,intcolumn,inthgap,intvgap)參數(shù):rows:網(wǎng)格行數(shù) column:網(wǎng)格列數(shù) hgap以像素為單位的水平間距離(負(fù)值強(qiáng)行重疊) vgap以像素為單位的垂直間距(負(fù)值強(qiáng)行重疊)其中參數(shù)rows,column可以為0,但不能同時(shí)為0。 BorderLayout常用方法BorderLayout常用方法返回CardLayoutCardLayout的容器可以容納多個(gè)組件,但是實(shí)際上同一時(shí)刻容器只能從這些組件中選出一個(gè)來顯示,就象一疊“撲克牌”每次只能顯示最上面的一張。CardLayout常用方法第9.6

復(fù)雜的布局管理復(fù)雜的布局管理在之前的布局管理概述中,只提到了邊框布局,流布局和網(wǎng)格布局。對(duì)于復(fù)雜的問題而言,這幾種布局顯然不夠。為啥這么麻煩?。。?!widows程序猿在widows中,布局管理不是一個(gè)太大的問題:首先可以用對(duì)話框編輯器將組件拖放到對(duì)話框的表面上。然后,再使用編輯器完成組件對(duì)齊,均衡間隔,中心定位等工作。如果正在開發(fā)一個(gè)大型項(xiàng)目,可能根本就不必?fù)?dān)心組件如何布局,技術(shù)嫻熟的用戶界面設(shè)計(jì)師會(huì)完成所有這些任務(wù)。java程序猿小樣,我來給你講講原因!自Java1.0以來,AWT就含有網(wǎng)格組布局(gridbaglayout),這種布局將組件按行和列排列。行和列的大小可以靈活改變,并且組件可以橫跨多行。這種布局管理器非常的靈活,但也非常復(fù)雜。好可怕的樣子!箱式布局(boxlayout)springlayout:虛構(gòu)的彈簧將同一容器的所有組件連接起來。Fail在2005年,NetBeans開發(fā)隊(duì)伍發(fā)明了Matisse技術(shù),這種技術(shù)將布局工具與布局管理器結(jié)合起來。用戶界面設(shè)計(jì)者可以使用工具將組件拖拽到容器中,并指出組件的排列方式。工具將設(shè)計(jì)者的意圖轉(zhuǎn)換成組布局管理器的可以理解的指令,與手工地編寫布局管理器布局管理的代碼相比,這樣做要便捷得多。做過的嘗試9.6.1網(wǎng)格組布局

網(wǎng)格組布局是所有布局管理器之母??梢詫⒕W(wǎng)格組布局看成是沒有任何限制的網(wǎng)格布局。在網(wǎng)格組布局中,行和列的尺寸可以改變、??梢詫⑾噜彽膯卧喜⒁赃m應(yīng)較大的組件(很多字處理器以及HTML都利用這個(gè)功能編輯表格:一旦需要就合并相鄰的單元格)。組件不需要填充整個(gè)單元格區(qū)域,并可以指定它們?cè)趩卧駜?nèi)的對(duì)齊方式。兩個(gè)用于指定字體外觀和大小的組合框兩個(gè)用于指選擇粗體和斜體的復(fù)選框。兩個(gè)組合框的標(biāo)簽。一個(gè)用于顯示示例字符串的文本區(qū)如何使用網(wǎng)格組管理器進(jìn)行布局?1)建立一個(gè)GridBagLayout的對(duì)象。不需要指定網(wǎng)格的行數(shù)和列數(shù)。布局管理器會(huì)根據(jù)后面所給的信息猜測(cè)出來。GridBagLayoutgb=newGridBagLayout();ContainerName.setLayout(gb);2)將GridBagLayout對(duì)象設(shè)置成組件的布局管理器。3)為每個(gè)組件建立一個(gè)GridBagLayout對(duì)象。設(shè)置GridBagLayout對(duì)象的域以便指出組件在網(wǎng)格組中的布局方案。4)最后,通過下面的調(diào)用添加組件的約束: add(component,constraints);GridBagContraints類的成員變量列表如下:1).gridx,gridy指定組件放在哪個(gè)單元中.其值應(yīng)該設(shè)為常數(shù)CridBagConstraints.RELATIVE.然后按標(biāo)準(zhǔn)順序?qū)⒔M件加入網(wǎng)格包布局.從左到右,從上到下.2).gridwidth,gridheight指定組件將占用幾行幾列3).weightx,weighty指定在一個(gè)GridBagLayout中應(yīng)如何分配空間.缺省為0.4).ipadx,ipady(內(nèi)部填充)指定組件的最小寬度和高度.可確保組件不會(huì)過分收縮.

5).fill指定在單元大于組件的情況下,組件如何填充此單元..缺省為組件大小不變.以下為靜態(tài)數(shù)據(jù)成員列表,它們是fill變量的值.GridBagConstraints.NONE不改變組件大小GridBagConstraints.HORIZONTAL增加組件寬度,使其水平填充顯示區(qū)域GridBagConstraints.VERTICAL增加組件高度,使其垂直填充顯示區(qū)域GridBagConstraints.BOTH使組件填充整個(gè)顯示區(qū)域

7)insets可以通過設(shè)置GridBagLayout的insets域在組件周圍增加附加的空白區(qū)域。通過設(shè)置inserts對(duì)象的left,top,right和bottom指定組件周圍的空間量。這被稱作外部填充。下面的策略可以讓網(wǎng)格組布局的使用相對(duì)簡(jiǎn)單一些:1)在紙上畫出組件布局草圖。2)找出一種網(wǎng)格,小組件被放置在一個(gè)單元格內(nèi),大組件將橫跨多個(gè)單元格。3)用0,1,2.......標(biāo)識(shí)網(wǎng)格的行和列。現(xiàn)在可以讀取gridx,gridy,gridwidth和gridheight的值。4)對(duì)于每個(gè)組件,需要考慮下列問題:是否需要水平或者垂直填充它所在的單元格?如果不需要,希望如何排列?這些就是fill和anchor參數(shù)的設(shè)置。5)將所有的增量設(shè)置為100.如果需要某行或某列始終保持默認(rèn)的大小,就將這行或這列中所有組件的weightx和weighty設(shè)置為0.6)編寫代碼。仔細(xì)地檢查GridBagConstraints的設(shè)置。錯(cuò)誤的約束可能會(huì)破壞整個(gè)布局。7)編譯,運(yùn)行。9.6.2組布局

GroupLayout是一個(gè)LayoutManager,它將組件按層次分組,以決定它們?cè)贑ontainer中的位置。GroupLayout主要供生成器使用,但也可以手工編碼。分組由Group類的實(shí)例來完成。GroupLayout支持兩種組。串行組(sequentialgroup)按順序一個(gè)接一個(gè)地放置其子元素。并行組(parallelgroup)能夠以四種方式對(duì)齊其子元素。

每個(gè)組可以包含任意數(shù)量的元素,其中元素有Group、component或間隙(gap)。間隙可被視為一個(gè)具有最小大小、首選大小和最大大小的不可見組件。此外,GroupLayout還支持其值取自LayoutStyle的首選間隙。

GroupLayout是一個(gè)很重要的是額布局管理器,在jdk1.6才加入,配合其它的管理器可以實(shí)現(xiàn)很好的界面。

GroupLayout必須要設(shè)置它的GroupLayout.setHorizontalGroup和GroupLayout.setVerticalGroup。有時(shí)候用戶可能不想使用任何布局管理器,而只是想把組件放在一個(gè)固定的位置上(通常稱為絕對(duì)定位)。這對(duì)于與平臺(tái)無關(guān)的應(yīng)用程序來說并不是一個(gè)好主意,但可用來快速地構(gòu)造原型。步驟:1)將布局管理器設(shè)置為null。2)將組件添加到容器中。3)指定想要放置的位置和大小。9.6.3不使用布局管理器示例代碼:frame.setLayout(null);JButtonok=newJButton("ok");frame.add(ok);ok.setBounds(10,10,30,15);原則上,可以通過自己設(shè)計(jì)LayoutManager類來實(shí)現(xiàn)特殊的布局方式。

9.6.4定制布局管理器器

定制布局管理器必須實(shí)現(xiàn)LayoutManager接口,并且需要覆蓋下面5個(gè)方法:voidaddLayoutComponent

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論