Java程序設(shè)計課件:單元14 swing布局管理_第1頁
Java程序設(shè)計課件:單元14 swing布局管理_第2頁
Java程序設(shè)計課件:單元14 swing布局管理_第3頁
Java程序設(shè)計課件:單元14 swing布局管理_第4頁
Java程序設(shè)計課件:單元14 swing布局管理_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、計算器界面設(shè)計單元14 Swing布局管理單元目標(biāo)u 掌握J(rèn)ava布局管理方式和布局管理器u 掌握常見布局方式的特點(diǎn)和使用方法學(xué)習(xí)任務(wù)1.任務(wù)描述編寫一個類似于Windows自帶的計算器程序??梢詫崿F(xiàn)加減乘除等基本數(shù)學(xué)運(yùn)算。本次任務(wù)只完成界面的設(shè)計和顯示任務(wù),用戶操作響應(yīng)和計算功能在下次任務(wù)中完成。2.運(yùn)行結(jié)果計算器界面設(shè)計 知識準(zhǔn)備14.1 Java布局管理在實際編程中,我們每設(shè)計一個窗體,都要往其中添加若干組件。為了管理好這些組件的布局,即大小、位置和排列方式,我們就需要使用布局管理器。將加入到容器的組件按照一定的順序和規(guī)則放置,使之看起來更美觀,這就是布局。在Java中,布局由布局管理器

2、 (LayoutManager) 來管理。Java提供了一組用來進(jìn)行布局管理的類,稱為布局管理器或布局。所有布局都實現(xiàn)了LayoutManager接口。容器內(nèi)組件的大小和位置由布局管理器控制,當(dāng)容器大小發(fā)生改變時,可以自動調(diào)整,以盡量美觀的方式適應(yīng)容器的變化。14.2常見的布局管理器常見的布局管理器包括 FlowLayout、CardLayout、GridLayout、BorderLayout、BoxLayout 、GridBagLayout 等。如果不使用布局管理器,叫做空布局或Null 布局,容器內(nèi)組件的大小和位置用絕對值指定,當(dāng)容器大小發(fā)生改變時,不會改變。14.2.1網(wǎng)格布局網(wǎng)格布局是

3、一種常用的布局方式,將容器的區(qū)域劃分成矩形網(wǎng)格,每個矩形大小規(guī)格一致,組件可以放置在其中的一個矩形中。通過java.awt.GridLayout類創(chuàng)建網(wǎng)格布局管理器對象,實現(xiàn)對容器中的各組件的網(wǎng)格布局排列。具體的排列方向取決于容器的組件方向?qū)傩?,組件方向?qū)傩杂袃煞N:從左向右和從右向左。用戶可以根據(jù)實際要求進(jìn)行設(shè)定方向?qū)傩裕J(rèn)的方向是從右向左。1.創(chuàng)建網(wǎng)格布局GridLayout的構(gòu)造方法如下:u GridLayout():創(chuàng)建默認(rèn)的網(wǎng)格布局。每一個組件占據(jù)一行一列。u GridLayout(int rows,int columns):創(chuàng)建指定行數(shù)和列數(shù)的網(wǎng)格布局。u GridLayout(i

4、nt rows,int columns, int hgap,int vgap):創(chuàng)建指定行數(shù)和列數(shù)的網(wǎng)格布局,并且指定水平間隔和垂直間隔的大小。2.GridLayout的常見方法GridLayout的常見方法見表4-1。表4-1 GridLayout的主要方法方 法功 能int getRows()獲取行數(shù)void setRows(int)設(shè)置行數(shù)int getColumns()獲取列數(shù)void setColumns(int)設(shè)置列數(shù)int getHgap() 獲取組件水平間隔void setHgap(int) 設(shè)置組件水平間隔int getVgap() 獲取組件垂直間隔void setVgap

5、() 設(shè)置組件垂直間隔例如,下面一段代碼可實現(xiàn)如圖4-8所示的運(yùn)行效果:String str=1,2,3,4,5,6,7,8,9; setLayout(new GridLayout(3,3); Button btn=new Buttonstr.length; / 創(chuàng)建按鈕數(shù)組 for(int i=0;istr.length;i+) btni=new Button(stri); add(btni);圖4-8 網(wǎng)格布局14.2.2邊界布局邊界布局BorderLayout是窗口、框架和對話框等的缺省布局。組件可被置于容器的北(上)、南(下)、東(右)、西(左)或中間位置。它可以對容器組件進(jìn)行安排,并

6、調(diào)整其大小,使其符合上述五個區(qū)域,每個區(qū)域最多只能包含一個組件,并通過相應(yīng)的常量進(jìn)行標(biāo)識:NORTH、SOUTH、EAST、WEST 和 CENTER。當(dāng)使用邊界布局將一個組件添加到容器中時,要使用這五個常量之一。NORTH 和 SOUTH 組件可以在水平方向上進(jìn)行拉伸;而 EAST 和 WEST 組件可以在垂直方向上進(jìn)行拉伸;CENTER 組件在水平和垂直方向上都可以進(jìn)行拉伸,從而填充所有剩余空間。1.創(chuàng)建邊界布局下面是BorderLayout所定義的構(gòu)造函數(shù):BorderLayout( ):生成默認(rèn)的邊界布局BorderLayout(int horz,int vert): 可以設(shè)定組件間的

7、水平和垂直距離BorderLayout 類定義了幾個常量值以指定相應(yīng)區(qū)域: BorderLayout.NORTH 對應(yīng)容器的頂部BorderLayout.EAST 對應(yīng)容器的右部BorderLayout.SOUTH 對應(yīng)容器的底部BorderLayout.WEST 對應(yīng)容器的左部BorderLayout.CENTER 對應(yīng)容器的中部加入組件方法是 void add(Component Obj, int region)。下面代碼段可實現(xiàn)如圖4-9所示的運(yùn)行效果。計算器界面設(shè)計setLayout(new BorderLayout(); Button btnEast=new Button(東); B

8、utton btnWest=new Button(西); Button btnNorth=new Button(北); Button btnSouth=new Button(南); Button btnCenter=new Button(中); add(btnEast,BorderLayout.EAST); add(btnWest,BorderLayout.WEST); add(btnNorth,BorderLayout.NORTH); add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);圖4-9 邊界布局當(dāng)窗

9、口縮放時,組件的位置不發(fā)生變化,但組件的大小會相應(yīng)改變。邊界布局管理器給予南、北組件最佳高度,使它們與容器一樣寬;給予東、西組件最佳寬度,而高度受到限制。如果窗口水平縮放,南、北、中區(qū)域變化;如果窗口垂直縮放,東、西、中區(qū)域變化。BorderLayout是窗口( JWindow)、框架(JFrame)、對話框(JDialog)等類型對象的默認(rèn)布局。2.BorderLayout的常用方法BorderLayout的常用方法見表4-2 。表4-2 BorderLayout的主要方法方 法功 能void addLayoutComponent(Component,Object)按指定約束添加組件到布局i

10、nt getHgap()獲取組件水平間隔void setHgap(int)設(shè)置組件水平間隔int getVgap()獲取組件垂直間隔void setVgap()設(shè)置組件垂直間隔14.2.3流布局類FlowLayout是流布局管理器。這種管理器的特點(diǎn)是,組件在容器內(nèi)依照指定方向按照組件添加的順序依次加入到容器中。這個指定方向取決于FlowLayout管理器的組件方向?qū)傩?。該屬性有兩種可能:從左到右方向和從右向左方向。在默認(rèn)情況下,這個指定方向是從左到右的。1.創(chuàng)建流布局下面是流布局BorderLayout所定義的構(gòu)造函數(shù):FlowLayout():創(chuàng)建一個流布局管理器,居中對齊,默認(rèn)的水平和垂直

11、間隙是 5 個單位。 FlowLayout(int align):創(chuàng)建一個指定對齊方式的流布局管理器,默認(rèn)的水平和垂直間隙是 5 個單位。 具體的對齊方式有居中對齊、左向?qū)R、右向?qū)R、容器開始的方向?qū)R(LEADING)以及容器結(jié)束的方向?qū)R(TRAILING)。FlowLayout(int align, int hgap, int vgap):創(chuàng)建一個流布局管理器,具有指定的對齊方式以及指定的水平和垂直間隙。2.FlowLayout的常用方法FlowLayout的常用方法見表4-3。表4-3 FlowLayout的主要方法方 法功 能int getAlignment()獲取對齊方式void

12、 setAlignment(int)設(shè)置對齊方式void setHgap(int) 設(shè)置組件水平間隔void setVgap() 設(shè)置組件垂直間隔14.2.4卡片布局卡片布局管理器能將容器中的組件看成不同的卡片層疊排列,每次只能顯示一張卡片。每張卡片只能容納一個組件。初次顯示時,顯示的是第一張卡片??ㄆ季止芾砥魇峭ㄟ^AWT包的類CardLayout來創(chuàng)建的。1.創(chuàng)建卡片布局CardLayout的構(gòu)造方法如下:CardLayout():創(chuàng)建一個間隔為0的卡片布局。CardLayout(int hgap,int vgap):創(chuàng)建一個指定水平間隔和垂直間隔的卡片布局。2. CardLayout的常

13、用方法CardLayout的常用方法見表4-4。表4-4 CardLayout的主要方法方 法功 能void first(Container)翻轉(zhuǎn)第一張卡片void next(Container)翻轉(zhuǎn)下一張卡片void previous(Container)翻轉(zhuǎn)上一張卡片void last(Container)翻轉(zhuǎn)最后一張卡片void show(Container,String)翻轉(zhuǎn)指定名稱的卡片任務(wù)實施1實現(xiàn)思路計算器界面整體布局采用BorderLayout。在上部安放一個JTextField對象,作為結(jié)果顯示區(qū)。中部和右部各安放一個JPanel對象,作為嵌套用的容器。中部keyPanel對

14、象采用GridLayout,設(shè)置為5行3列,每個單元格可以顯示一個按鈕,用于顯示數(shù)字鍵盤、小數(shù)點(diǎn)等按鈕。右部operatorPanel對象采用GridLayout,設(shè)置為4行1列,顯示加、減、乘、除四個按鈕。(1)建立Calculator類指定超類JFrame(2)設(shè)置窗口布局為BorderLayout(3)在上部添加JTextField對象result(4)在中部添加keyPanel及其上面的按鈕(5)在右部添加operatorPanel及其上面的按鈕(6)書寫main方法測試2. 程序代碼計算器界面設(shè)計JButton jb;JPanel jp = new JPanel();jp.setLa

15、yout(new BorderLayout();/ 創(chuàng)建文本條,不允許編輯,添加到窗口上方result = new JTextField();result.setEditable(false);jp.add(result,BorderLayout.NORTH);JPanel keyPanel = new JPanel();keyPanel.setLayout(new GridLayout(5,3);for(int i=1;i=9;i+)jb = new JButton(+i);keyPanel.add(jb);jb = new JButton(0);keyPanel.add(jb);jb =

16、new JButton(清空);keyPanel.add(jb);jb = new JButton(退格);keyPanel.add(jb);jb = new JButton(.);keyPanel.add(jb);jb = new JButton(=);keyPanel.add(jb);jp.add(keyPanel,BorderLayout.CENTER);JPanel operatorPanel = new JPanel();operatorPanel.setLayout(new GridLayout(4,1);jb = new JButton(+);operatorPanel.add(

17、jb);jb = new JButton(-);operatorPanel.add(jb);jb = new JButton(*);operatorPanel.add(jb);jb = new JButton(/);operatorPanel.add(jb);jp.add(operatorPanel,BorderLayout.EAST);/添加JPanel容器到窗體中setContentPane(jp);任務(wù)拓展1.GridBagLayoutGridBagLayout中組件大小不必相同,組件按行和列排列,放置順序不一定為從左至右和由上至下,顯示效果如圖4-10所示。通過使用以下語法,容器可獲得

18、 GridBagLayout布局對象:u GridBagLayout gb=new GridBagLayout();u ContainerName.setLayout(gb);要使用此布局,必須提供各組件的大小和布局等信息。GridBagConstraints 類中包含 GridBagLayout 類用來定位及調(diào)整組件大小所需的全部信息。圖4-10 GridBagLayout布局GridBagConstraints 類成員變量列表:gridx, gridy : 指定組件放置于哪個單元中;gridwidth, gridheight指定組件將占用多少行和多少列;weightx, weighty指定

19、在一個GridBagLayout中應(yīng)如何分配空間,這些變量的缺省值為 0(組件擠在容器中間,1則填滿容器)ipadx, ipady指定組件的最小高度和寬度;fill指定在單元大于組件的情況下,組件如何填充此單元,共有4可選值。缺省值為:GridBagConstraints.NONE(HORIZONTAL、VERTICAL、BOTH);anchor指定將組件放置在單元中的位置,共有9個可選值。缺省值為:GridBagConstraints.CENTER。Box布局中組件排為一行或一列,組件再多也不會變?yōu)槎嘈谢蚨嗔?,可使用支撐調(diào)整組件間距離,可使用膠水處理剩余空間。組件間隙有時可以通過直接設(shè)定實現(xiàn)

20、,例如網(wǎng)格布局和邊界布局,組件水平和垂直間距缺省值為0,但可以通過相應(yīng)的構(gòu)造方法設(shè)定空隙:u GridLayout(int rows,int cols,int hgap,int vgap);u Borderlayout(int hgap,int vgap);hgap和vgap分別為組件間水平和垂直方向的空白空間。另外,在布局時還可以使用空隙類。空隙類的對象是一種占用空間但卻透明不可見的組件,用于控制組件之間的間隔,使組件之間可以更好地顯示??障额惖膭?chuàng)建方法如下:u Component component=Box.createRigidArea(size):方形空隙類。u Component c

21、omponent=Box.createHorizontaIGlue(size):水平空隙類。u Component component= Box.createHorizontaIStrut( size):水平空隙類,可以定義長度。u Component component=Box.createVerticalGlue(size):垂直空隙類。u Component component=Box.createVerticaIStrut(size):垂直空隙類,可以定義高度。2.自定義布局自定義布局也被稱為“空布局”或“Null布局”。調(diào)用方法setLayout(null)就為容器設(shè)置了空布局。在空布局中,可以通過調(diào)用組件的setBou

溫馨提示

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

最新文檔

評論

0/150

提交評論