2023學(xué)年完整公開課版布局管理(2022版)_第1頁
2023學(xué)年完整公開課版布局管理(2022版)_第2頁
2023學(xué)年完整公開課版布局管理(2022版)_第3頁
2023學(xué)年完整公開課版布局管理(2022版)_第4頁
2023學(xué)年完整公開課版布局管理(2022版)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

布局管理物流信息管理系統(tǒng)開發(fā)組件在容器中的位置和尺寸是由布局管理器決定的,每當(dāng)需要重新調(diào)整屏幕大小時(shí),都要用到布局管理器。Swing常用的布局管理器有4種,分別是FlowLayout(流式布局管理器)、BorderLayout(邊界布局管理器)、GridLayout(網(wǎng)格布局管理器)、GridBagLayout(網(wǎng)格包布局管理器)。Swing容器在創(chuàng)建時(shí)都會使用一種默認(rèn)的布局管理器,在程序中可以通過調(diào)用容器對象的setLayout()方法設(shè)置布局管理器,通過布局管理器自動進(jìn)行組件的布局管理。布局管理器FlowLayout屬于流式布局管理器,是最簡單的布局管理器。在這種布局下,容器會將組件按照添加順序從左向右放置。當(dāng)?shù)竭_(dá)容器的邊界時(shí),自動將組件放到下一行的開始位置。這些組件可以左對齊、居中對齊(默認(rèn)方式)或右對齊的方式排列。1FlowLayoutFlowLayout類的常用方法及變量如下表。1FlowLayout方法及常量類型功能描述publicFlowLayout()構(gòu)造方法組件默認(rèn)居中對齊,水平、垂直間距默認(rèn)為5個單位publicFlowLayout(intalign)構(gòu)造方法指定組件相對于容器的對齊方式,水平、垂直間距默認(rèn)為5個單位publicFlowLayout(intalign,inthgap,intvgap)構(gòu)造方法指定組件的對齊方式和水平、垂直間距publicstaticfinalintCENTER常量居中對齊publicstaticfinalintLEADING常量與容器的開始端對齊方式一樣publicstaticfinalintLEFT常量左對齊publicstaticfinalintRIGHT常量右對齊上表列出了FlowLayout的三個構(gòu)造方法及四個常量。構(gòu)造方法中的參數(shù)align決定組件在每行中相對于容器邊界的對齊方式,可以使用FlowLayout類中提供的常量作為參數(shù)傳遞給構(gòu)造方法;參數(shù)hgap和參數(shù)vgap分別設(shè)定組件之間的水平和垂直間隙,可以填入一個任意數(shù)值。FlowLayout類的常量中,F(xiàn)lowLayout.LEFT表示左對齊、FlowLayout.RIGHT表示右對齊、FlowLayout.CENTER表示居中對齊。1FlowLayout1importjavax.swing.*;2importjava.awt.*;3classExample03{4publicstaticvoidmain(String[]args){5JFrameframe=newJFrame("helloworld");6//設(shè)置窗體中的布局管理器為FlowLayout,所有的組件居中對齊,水平和垂直間距為37frame.setLayout(newFlowLayout(FlowLayout.CENTER,3,3));接下來通過一個案例學(xué)習(xí)FlowLayout布局管理器的用法1FlowLayout8JButtonbutton=null;9for(inti=0;i<9;i++){10button=newJButton("按鈕"+i);11frame.add(button);12}13frame.setSize(280,250);14frame.setVisible(true);15}16}接下來通過一個案例學(xué)習(xí)FlowLayout布局管理器的用法1FlowLayout1FlowLayout程序運(yùn)行結(jié)果如下圖在上述代碼中,使用流式布局管理器對按鈕進(jìn)行管理。在這個過程中,第5行代碼創(chuàng)建了一個JFrame窗口frame并,在創(chuàng)建窗體對象的同時(shí)定義了窗體對象的標(biāo)題為“helloworld”,第7行代碼通過JFrame的setLayout屬性將該窗口的布局管理器設(shè)置為FlowLayout。在第8~12行代碼中,定義了一個JButton的按鈕,然后使用for循環(huán)向窗口中添加9個按鈕。通過運(yùn)行結(jié)果可以看出,frame窗口中的按鈕按照流式布局進(jìn)行排列。1FlowLayout

FlowLayout布局管理器的特點(diǎn)就是可以將所有組件像流水一樣依次進(jìn)行排列,不需要用戶明確的設(shè)定,但是在靈活性上相對差了點(diǎn)。例如,將上圖中的窗體拉伸變寬,按鈕的大小和按鈕之間的間距將保持不變,但按鈕相對于容器邊界的距離會發(fā)生變化,窗體拉伸變寬效果如右圖。1FlowLayoutBorderLayout(邊界布局管理器)是一種較為復(fù)雜的布局方式,它將窗體劃分為五個區(qū)域,分別是東(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。組件可以被放置在這五個區(qū)域中的任意一個區(qū)域中。BorderLayout的布局效果如右圖。2BorderLayout

BorderLayout將窗體劃分為五個區(qū)域,其中箭頭是指改變?nèi)萜鞔笮r(shí),各個區(qū)域需要改變的方向。也就是說,在改變窗體大小時(shí),NORTH和SOUTH區(qū)域高度不變,寬度調(diào)整;WEST和EAST區(qū)域?qū)挾炔蛔?,高度調(diào)整;CENTER會相應(yīng)進(jìn)行調(diào)整。2BorderLayout2BorderLayout當(dāng)向BorderLayout管理的窗體中添加組件時(shí),需要調(diào)用add(Componentcomp,Objectconstraints)方法,其中,參數(shù)comp表示要添加的組件,參數(shù)constraints是一個Object類型的對象,用于指定組件添加方式以及添加位置。向add()方法傳參時(shí),可以使用BorderLayout類提供的5個常量,它們分別是EAST、SOUTH、WEST、NORTH和CENTER。BorderLayout的常用方法及常量如下表。2BorderLayout方法及常量類型功能描述publicBorderLayout()構(gòu)造方法構(gòu)造沒有間距的布局器publicBorderLayout(intalign,inthgap,intvgap)構(gòu)造方法構(gòu)造有水平和垂直間距的布局器publicstaticfinalStringEAST常量將組件設(shè)置在東區(qū)域publicstaticfinalStringWEST常量將組件設(shè)置在西區(qū)域publicstaticfinalStringSOUTH常量將組件設(shè)置在南區(qū)域publicstaticfinalStringNORTH常量將組件設(shè)置在北區(qū)域publicstaticfinalStringCENTER常量將組件設(shè)置在中區(qū)域1importjavax.swing.*;2importjava.awt.*;3classBorderLayoutDemoextendsJFrame{4//構(gòu)造函數(shù),初始化對象值5publicBorderLayoutDemo(){6//設(shè)置為邊界布局,組件間橫向、縱向間距均為5像素7setLayout(newBorderLayout(5,5));8setFont(newFont("Helvetica",Font.PLAIN,14));9//將按鈕添加到窗口中10getContentPane().add("North",newJButton(BorderLayout.NORTH));接下來通過一個案例演示BorderLayout布局管理器對組件布局的效果2BorderLayout11getContentPane().add("East",newJButton(BorderLayout.EAST));12getContentPane().add("West",newJButton(BorderLayout.WEST));13getContentPane().add("Center",newJButton(BorderLayout.CENTER));14}15publicstaticvoidmain(Stringargs[]){16BorderLayoutDemof=newBorderLayoutDemo();17f.setTitle("邊界布局");18f.pack();19f.setVisible(true);20f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);21f.setLocationRelativeTo(null);//讓窗體居中顯示22}23}接下來通過一個案例演示BorderLayout布局管理器對組件布局的效果2BorderLayout2BorderLayout程序運(yùn)行結(jié)果如下圖2BorderLayout上述代碼中,第7行代碼為Frame容器設(shè)置了BorderLayout布局管理器(也可以不用設(shè)置,F(xiàn)rame默認(rèn)使用BorderLayout布局管理器),第10~14行代碼在容器的東、南、西、北、中五個區(qū)域各放置了1個按鈕。2BorderLayout

BorderLayout的優(yōu)點(diǎn)就是可以限定各區(qū)域的邊界,當(dāng)用戶改變?nèi)萜鞔翱诖笮r(shí),各個組件的相對位置不變。但需要注意的是,向BorderLayout管理的容器添加組件時(shí),如果不指定添加到哪個區(qū)域,則默認(rèn)添加到CENTER區(qū)域,并且只能放置一個組件,如果向一個區(qū)域中添加多個組件時(shí),后放入的組件會覆蓋先放入的組件。3GridLayoutGridLayout布局管理器是以網(wǎng)格的形式管理容器中組件布局的。GridLayout使用縱橫線將容器分成n行m列大小相等的網(wǎng)格,每個網(wǎng)格中放置一個組件。添加到容器中的組件首先放置在第1行第1列(左上角)的網(wǎng)格中,然后在第1行的網(wǎng)格中從左向右依次放置其他組件。一行放滿之后,繼續(xù)在下一行中從左到右放置組件。GridLayout管理方式與FlowLayou類似,但與FlowLayout不同的是,使用GridLayout管理的組件將自動占據(jù)網(wǎng)格的整個區(qū)域。3GridLayoutGridLayout的常用構(gòu)造方法如下表方法聲明功能描述GridLayout()默認(rèn)只有一行,每個組件占一列GridLayout(introws,intcols)指定容器的行數(shù)和列數(shù)GridLayout(introws,intcols,inthgap,intvgap)指定容器的行數(shù)和列數(shù)以及組件之間的水平、垂直間距3GridLayout列出了GridLayout的三個構(gòu)造方法,其中,參數(shù)rows代表行數(shù),cols代表列數(shù),hgap和vgap規(guī)定水平和垂直方向的間隙。水平間隙指的是網(wǎng)格之間的水平距離,垂直間隙是指網(wǎng)格之間的垂直距離。1importjava.awt.*;2publicclassExample05{3 publicstaticvoidmain(String[]args){4 Framef=newFrame("GridLayout");//創(chuàng)建一個名為GridLayout的窗體5 f.setLayout(newGridLayout(3,3));//設(shè)置該窗體為3*3的網(wǎng)格6 f.setSize(300,300);//設(shè)置窗體大小7 f.setLocation(400,300);8 //下面的代碼是循環(huán)添加9個按鈕到GridLayout中9 for(inti=1;i<=9;i++){10 Buttonbtn=newButton("btn"+i);11 f.add(btn);//向窗體中添加按鈕12 }13 f.setVisible(true);14 }15}接下來通過一個案例演示GridLayout布局的用法3GridLayout3GridLayout程序運(yùn)行結(jié)果如下圖。4GridBagLayout

GridBagLayout是最靈活、最復(fù)雜的布局管理器。GridBagLayout與GridLayout布局管理器類似,不同的是,GridBagLayout允許網(wǎng)格中的組件大小各不相同,而且允許一個組件跨越一個或者多個網(wǎng)格。4GridBagLayout使用GridBagLayout布局管理器的步驟如下:1

創(chuàng)建GridbagLayout布局管理器,設(shè)置容器采用該布局管理器。具體示例如下:GridBagLayoutlayout=newGridBagLayout();container.setLayout(layout);4GridBagLayout2創(chuàng)建GridBagContraints對象,并設(shè)置該對象的相關(guān)屬性(設(shè)置布局約束條件)。具體示例如下:GridBagConstraintsconstraints=newGridBagConstraints();constraints.gridx=1; //設(shè)置網(wǎng)格的左上角橫向索引constraints.gridy=1; //設(shè)置網(wǎng)格的左上角縱向索引constraints.gridwidth=1; //設(shè)置組件橫向跨越的網(wǎng)格constraints.gridheight=1; //設(shè)置組件縱向跨越的網(wǎng)格4GridBagLayout3調(diào)用GridBagLayout對象的setConstraints()方法,建立GridBagConstraints對象和受控組件之間的關(guān)聯(lián)。具體示例如下:layout.setConstraints(component,constraints);4向容器中添加組件。具體示例如下:container.add(conponent);GridBagConstraints對象可以重復(fù)使用。如果改變布局,只需要改變GridBagConstraints對象的屬性即可。如果要向容器中添加多個組件,則重復(fù)(2)、(3)、(4)步驟。4GridBagLayout從上面的步驟可以看出,使用GridBagLayout布局管理器的關(guān)鍵在于GridBagConstraints對象。GridBagConstraint類才是控制容器中每個組件布局的核心類,在GridBagConstraints類中有很多用于設(shè)置約束條件的屬性。GridBagConstraints類的常用屬性如下表。4GridBagLayout屬性作用gridx和gridy設(shè)置組件所在網(wǎng)格的橫向和縱向索引(即所在的行和列)。如果將gridx和gridy的值設(shè)置為GridBagConstraints.RELATIVE(默認(rèn)值),表示當(dāng)前組件緊跟在上一個組件后面。gridwidth和gridheight設(shè)置組件橫向、縱向跨越幾個網(wǎng)格,兩個屬性的默認(rèn)值都是1。如果把這兩個屬性的值設(shè)為GridBagConstraints.REMAINER表示組件在當(dāng)前行或列上為最后一個組件。如果把這兩個屬性的值設(shè)為GridBagConstraints.RELATIVE,表示組件在當(dāng)前行或列上為倒數(shù)第二個組件。屬性作用fill如果組件的顯示區(qū)域大于組件需要的大小,設(shè)置組件改變方式,該屬性接收以下幾個屬性值:NONE:默認(rèn),不改變組件大小。HORIZONTAL:使組件水平方向足夠長以填充顯示區(qū)域,但是高度不變,VERTICAL:使組件垂直方向足夠高以填充顯示區(qū)域,但長度不變。BOTH:使組件足夠大,以填充整個顯示區(qū)域。weightx和weighty設(shè)置組件占領(lǐng)容器中水平方向和垂直方向多余空白的比例(也稱為權(quán)重)。假設(shè)容器的水平方向放置三個組件,組件的weightx屬性值分別為1、2、3,當(dāng)容器寬度增加60個像素時(shí),這三個容器分別增加10、20、和30的像素。weightx和weighty屬性的默認(rèn)值是0,即不占領(lǐng)多余的空間。4GridBagLayout4GridBagLayout如果希望組件的大小隨著容器的增大而增大,必須同時(shí)設(shè)置GridBagConstraints對象的fill屬性和weightx、weighty屬性。4GridBagLayout1importjava.awt.*;2classLayoutextendsFrame{3 publicLayout(Stringtitle){4 GridBagLayoutlayout=newGridBagLayout();5 GridBagConstraintsc=newGridBagConstraints();6 this.setLayout(layout);7 c.fill=GridBagConstraints.BOTH; //設(shè)置組件橫向縱向可以拉伸8 c.weightx=1; //設(shè)置橫向權(quán)重為19 c.weighty=1; //設(shè)置縱向權(quán)重為110 this.addComponent("btn1",layout,c);11 this.addComponent("btn2",layout,c);12 this.addComponent("btn3",layout,c);

接下來通過一個案例演示GridBagLayout的用法4GridBagLayout13 c.gridwidth=GridBagConstraints.REMAINDER; 14 this.addComponent("btn4",layout,c);15 c.weightx=0; //設(shè)置橫向權(quán)重為016 c.weighty=0; //設(shè)置縱向權(quán)重為017 addComponent("btn5",layout,c);18 c.gridwidth=1; //設(shè)置組件跨一個網(wǎng)格(默認(rèn)值)19 this.addComponent("btn6",layout,c);20 c.gridwidth=GridBagConstraints.REMAINDER; 21 this.addComponent("btn7",layout,c);22 c.gridheight=2; //設(shè)置組件縱向跨兩個網(wǎng)格23 c.gridwidth=1; //設(shè)置組件橫向跨一個網(wǎng)格24 c.weightx=2; //設(shè)置橫向權(quán)重為225 c.weighty=2; //設(shè)置縱向權(quán)重為226 this.addComponent("btn8",layout,c); 4GridBagLayout27 c.gridwidth=GridBagConstraints.REMAINDER;28 c.gridheight=1;29 this.addC

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論