




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第九章GUI界面設(shè)計(jì)遼寧機(jī)電職業(yè)技術(shù)學(xué)院信息工程系軟件教研室遲勇回顧請(qǐng)給出下列Java代碼的運(yùn)行結(jié)果publicclassTest{publicstaticvoidmain(String[]args){ newTest().test();}publicvoidtest(){try{
int[]arr=newint[3];
arr[3]=2;
System.out.println("try");}catch(ArrayIndexOutOfBoundsExceptione){
System.out.println("catch1");}catch(Exceptione){
System.out.println("catch2");}finally{
System.out.println("finally");}}}控制臺(tái)輸出
catch1Finally本章學(xué)習(xí)任務(wù)學(xué)習(xí)各種UI組件外觀和常用方法學(xué)習(xí)創(chuàng)建窗體、對(duì)話框、面板等容器的方法創(chuàng)建AWT基本組件和菜單學(xué)習(xí)使用各種布局和布局嵌套完成“調(diào)查卡”應(yīng)用界面本章技能目標(biāo)學(xué)習(xí)GUI組件的構(gòu)造和使用;了解和使用各種布局管理器創(chuàng)建UI布局;初步掌握Swing組件的使用方法;預(yù)習(xí)檢查(1)--預(yù)習(xí)新單詞單詞釋義單詞釋義AWTGUIJFCMVCSwingLayoutContainerComponentDialogFramePanel預(yù)習(xí)檢查(2)說說JavaUI常用的布局有哪幾種?GUI界面設(shè)計(jì)-內(nèi)容目錄GUI組件布局管理器Swing組件9.1GUI組件9.1.1抽象窗口工具包(AWT:AbstractWindowToolkit)抽象窗口工具包(AbstractWindowToolkit)簡(jiǎn)稱:AWT,是為Java程序提供圖形用戶界面(GraphicsUserInterface:GUI)的一組API。主要功能包括:用戶界面組件、界面布局設(shè)計(jì)和管理、圖形圖像處理、事件處理等。下面是AWT包中部分重要類和子包:組件是構(gòu)成GUI的基本元素1)java.awt.Component:抽象類,是AWT包所有組件類的超類;2)java.awt.datatransfer:提供數(shù)據(jù)傳輸和剪貼板功能的包3)java.awt.dnd:提供用戶拖曳操作功能的包4)java.awt.event:提供事件處理功能的包5)java.awt.image:提供圖像處理功能的包6)java.awt.peer:提供AWT程序運(yùn)行所需界面的同位體運(yùn)行7)javax.swing:Swing組件包圖9-2AWT組件外觀TextFieldCheckboxTextAreaLabelChoiceListCheckboxButton圖9-2是Windows平臺(tái)中的部分AWT組件圖9-3AWT包中組件類的層次CanvasButtonScrollbarListTextComponentCheckboxChoiceLabelContainer容器組件符號(hào)表示:MenuComponentObjectComponentMenuBarMenuItemMenuTextFieldTextAreaScrollPanelPanelWindowAppletFrameDialog
圖9-3描述了AWT包中組件類的層次關(guān)系9.1.2GUI組件與容器所有AWT組件都是Component類和MenuComponent類的擴(kuò)展子類,Component類封裝了所有AWT組件通用的方法和屬性其常用方法如下表:(其中XXX為具體的事件類型,例如:addActionListener()常用方法功能addXXXListener(XXXListenerl)添加指定的XXX監(jiān)聽器,接收此組件發(fā)出的事件setBackground(Colorc)設(shè)置組件的背景色getBackground()獲得組件的背景色setForeground(Colorc)設(shè)置組件的前景色9.1.2GUI組件與容器setFont(Fontf)設(shè)置組件的字體getFont()獲得組件的字體getSize()返回組件的大小getWidth()返回組件的當(dāng)前寬度getHeight()返回組件的當(dāng)前高度getX()返回組件原點(diǎn)的當(dāng)前x坐標(biāo)getY()返回組件原點(diǎn)的當(dāng)前y坐標(biāo)9.1.2GUI組件與容器paint(Graphicsg)繪制此組件repaint()重繪此組件requestFocus()請(qǐng)求此組件獲得輸入焦點(diǎn),并且此組件的頂層組件成為獲得焦點(diǎn)的WindowsetBounds(intx,inty,intwidth,intheight)移動(dòng)組件并調(diào)整其大小setEnabled(booleanb)根據(jù)參數(shù)b的值啟用或禁用此組件setVisible(booleanb)根據(jù)參數(shù)b的值顯示或隱藏此組件toString()返回此組件及其值的字符串表示形式update(Graphicsg)更新組件一、AWT容器組件1、窗體(框架)(Frame)Frame類是Window類的子類,它具備邊框,標(biāo)題欄,系統(tǒng)菜單,最大、最小化按鈕,是一個(gè)具備完全功能的窗體。它的構(gòu)造方法如下:Frame();默認(rèn)構(gòu)造方法,創(chuàng)建沒有標(biāo)題的窗體Frame(Stringtitle);創(chuàng)建以title為標(biāo)題欄文字的窗體其主要成員方法如下其它方法:setSize(intwidth,intheight);為窗體設(shè)置大小,width為窗體寬度,height為高度pack();以緊湊組件的方式設(shè)置窗體大小setTitle(Stringtitle);為窗體設(shè)置標(biāo)題setVisible(booleanb);為窗體設(shè)置可見性,默認(rèn)時(shí)窗體為不可見例9-1:創(chuàng)建簡(jiǎn)單窗體importjava.awt.*;publicclassFrameDemoextendsFrame{publicFrameDemo(Stringtitle)//自定義構(gòu)造方法,title為窗體標(biāo)題
{super(title);//調(diào)用超類的帶參數(shù)的構(gòu)造方法
this.setSize(200,100); setVisible(true);}publicstaticvoidmain(String[]args){newFrameDemo("簡(jiǎn)單窗體");}}【運(yùn)行結(jié)果】例9-2:創(chuàng)建簡(jiǎn)單窗體另一種形式importjava.awt.*;publicclassFrameDemoextendsFrame{Framef=newFrame();Labella1=newLabel("您好,這是Label組件!");publicFrameDemo(){f.add(la1); f.setTitle("簡(jiǎn)單窗體"); f.pack(); f.setVisible(true);}publicstaticvoidmain(String[]args){newFrameDemo();}}【運(yùn)行結(jié)果】2、對(duì)話框(Dialog)對(duì)話框是可以接受用戶輸入的彈出式窗體,它也是一種帶邊框的容器,與Frame不同的是對(duì)話框依賴于其它的窗體,當(dāng)窗體最小化時(shí),對(duì)話框也會(huì)隨之最小化。對(duì)話框可分為模態(tài)對(duì)話框(model)和非模態(tài)對(duì)話框(modelless)Dialog(Framefrm,Stringtitle,booleanmodal);創(chuàng)建一個(gè)不可見、以title內(nèi)容為標(biāo)題的對(duì)話框,相關(guān)聯(lián)的窗體是框架類的對(duì)象frm,第二個(gè)參數(shù)為true表示創(chuàng)建模式對(duì)話框,為false表示創(chuàng)建非模式對(duì)話框。Dialog的方法繼承自Component和Window,所以它具備Component和Window類的所有特征,如setVisible()方法等,其它重要方法如下:booleanisModal();返回對(duì)話框的類型,模式對(duì)話框返回true,否則,返回falsevoidsetModal(booleanb);設(shè)置對(duì)話框的類型,參數(shù)true表示設(shè)置模式對(duì)話框,為false表示設(shè)置非模式對(duì)話框。例9-3:創(chuàng)建模態(tài)對(duì)話框importjava.awt.*;publicclassMyFrameextendsFrame{ButtonbtnOpen=newButton(“打開”); MyFrame(Strings) {super(s);//調(diào)用父類構(gòu)造方法 add(btnOpen);//將按鈕對(duì)象添加到窗體中 setSize(200,150); setVisible(true);//設(shè)置窗體是可見的} publicstaticvoidmain(Stringargs[]) { MyFramef=newMyFrame(“窗口”);//創(chuàng)建窗體,標(biāo)題為“窗口” MyDialogdlg=newMyDialog(f,“登錄對(duì)話框”,true);//創(chuàng)建對(duì)話框 }}例9-3:創(chuàng)建模態(tài)對(duì)話框--2classMyDialogextendsDialog//對(duì)話框類{MyDialog(Framef,Strings,booleanb)//構(gòu)造方法,f是與對(duì)話框相關(guān)的窗體 {super(f,s,b);//調(diào)用父類的構(gòu)造方法,對(duì)話框?qū)⒁蕾囉趂窗體 setSize(120,50); setVisible(true);//設(shè)置對(duì)話框可見 }}【運(yùn)行結(jié)果】3、面板(Panel)面板是一種容器與Window類的子類不同的是:面板(及其子類)無邊框、無標(biāo)題,不能被移動(dòng)、放大、縮小或關(guān)閉。因此,面板不能作為獨(dú)立的容器使用,通常它作為中間容器,用以容納其它組件,或子面板。通常面板被放置在其他能獨(dú)立使用的容器中,如放置在窗體內(nèi)。Panel類的構(gòu)造方法如下:Panel();創(chuàng)建一個(gè)使用默認(rèn)的布局管理器的面板。Panel(LayoutManagerlayout);創(chuàng)建一個(gè)使用指定布局管理器的面板。例9-4:面板的使用publicclassMyFrameextendsFrame{ButtonbtnOpen=newButton("打開");ButtonbtnClose=newButton("關(guān)閉");Panelp=newPanel();MyFrame(Strings){super(s);//調(diào)用父類構(gòu)造方法
p.setBackground(Color.CYAN);//將面板p背景色設(shè)為青色add(p);//把面板p添加到窗口中
p.add(btnOpen);//將按鈕添加到面板中p.add(btnClose);setSize(200,100);setVisible(true);}例9-4:面板的使用--2publicstaticvoidmain(Stringargs[]){MyFramef=newMyFrame("窗口");//創(chuàng)建框架(窗口),標(biāo)題為"窗口“}}【運(yùn)行結(jié)果】(如圖所示:窗體包含一個(gè)青色面板,此面板中包含兩個(gè)按鈕)
二、AWT基本組件1、按鈕(Button)Button的構(gòu)造方法:Button(Stringlabel);常用成員方法:setLabel(Stringlabel);將按鈕的標(biāo)簽文字設(shè)置為指定的字符串getLabel();獲得此按鈕的標(biāo)簽文字。setActionCommand();設(shè)置此按鈕激發(fā)的操作事件的命令名稱。(默認(rèn)即按鈕的標(biāo)簽文字);getActionCommand();得到此按鈕激發(fā)的操作事件的命令名稱二、AWT基本組件--2
2、標(biāo)簽(Label)Label的構(gòu)造方法:Label(Stringlabel);常用成員方法:setText();設(shè)置此標(biāo)簽的文本。getText();獲取此標(biāo)簽的文本。二、AWT基本組件--3
3、文本框(TextField)TextField的構(gòu)造方法:TextField(Stringlabel);常用成員方法:setText(Stringstr);將此文本框顯示的文本設(shè)置為指定文本(繼承自父類TextComponent)。getText();獲取文本框的文本(繼承自父類TextComponent)setEditable(booleanb);設(shè)置判斷此文本框是否可編輯的標(biāo)志setEchoChar(charc);設(shè)置此文本框的回顯字符(繼承自父類TextComponent)。二、AWT基本組件--4
4、文本區(qū)(TextArea)TextArea的構(gòu)造方法:TextArea(Stringlabel);構(gòu)造一個(gè)新文本區(qū),該文本區(qū)具有指定的文本。TextArea(Stringtext,introws,intcolumns);構(gòu)造一個(gè)新文本區(qū)常用成員方法:setText(Stringstr);(與文本框的功能相同)getText();(與文本框的功能相同)setEditable(booleanb);(與文本框的功能相同)append(Stringstr);將給定文本追加到文本區(qū)的當(dāng)前文本insert(Stringstr,intpos);在此文本區(qū)的指定位置插入指定文本。二、AWT基本組件--5
5、單選框與復(fù)選框(Checkbox)Checkbox的構(gòu)造方法:Checkbox(Stringlabel);Checkbox(Stringlabel,booleanstate,CheckboxGroupgroup);使用指定的標(biāo)簽文字構(gòu)造一個(gè)Checkbox,使用布爾值state將它設(shè)置為指定的默認(rèn)選擇狀態(tài),并使它處于指定的復(fù)選框組中常用方法:getLabel();獲得此復(fù)選框的標(biāo)簽。setState(booleanstate);設(shè)置復(fù)選框的“開”、“關(guān)”狀態(tài)。getState();返回此復(fù)選框的“開”、“關(guān)”狀態(tài)。二、AWT基本組件--6
6、列表框(List)與下拉選擇框(Choice)List的構(gòu)造方法:List(introws,booleanmultipleMode);創(chuàng)建一個(gè)初始化顯示為指定行數(shù)rows的新滾動(dòng)列表,如果multipleMode的值為true,則可從列表中同時(shí)選擇多項(xiàng)。Choice的構(gòu)造方法:Choice();(選擇框只有這一種構(gòu)造形式)常用成員方法:add();將一個(gè)項(xiàng)目添加到此List或Choice中,替代已經(jīng)過時(shí)的addItem()。getItem(intindex);獲得此List或Choice中指定索引上的字符串。getItemCount();返回此List或Choice中項(xiàng)目的數(shù)量。getSelectedIndex();返回當(dāng)前選定項(xiàng)的索引,如果沒有選定任何內(nèi)容,則返回-1。getSelectedItem();獲得當(dāng)前選擇項(xiàng)目的字符串表示形式。insert(Stringitem,intindex);將項(xiàng)目item插入到的指定位置index上remove(intposition);從指定位置position上移除一個(gè)項(xiàng)目二、AWT基本組件--7
7、菜單組件菜單(Menu)應(yīng)包含菜單項(xiàng)(MenuItem),并被包含在菜單欄(MenuBar)中,它們的位置關(guān)系如圖9-3。菜單組件的構(gòu)造方法如下:菜單項(xiàng)(MenuItem):MenuItem(Stringlabel);構(gòu)造具有指定標(biāo)簽的新菜單項(xiàng)。MenuItem(Stringlabel,MenuShortcuts);創(chuàng)建具有關(guān)聯(lián)的鍵盤快捷方式的菜單項(xiàng)。菜單(Menu):Menu(Stringlabel);構(gòu)造具有指定標(biāo)簽的新菜單。菜單欄(MenuBar):MenuBar();創(chuàng)建新的菜單欄。圖9-3菜單類及其子類的位置關(guān)系
MenuMenuMenuItemMenuBarMenuItem例9-5:構(gòu)建菜單示例importjava.awt.*;publicclassShortcutMenuextendsFrame{MenuShortcutmsOpen=newMenuShortcut('O');…MenuBarmenubar=newMenuBar();MenumnFile=newMenu("文件");MenumnHelp=newMenu("幫助");…
MenuItemmiOpen=newMenuItem("打開",msOpen);…publicShortcutMenu(Stringtitle)例9-5:構(gòu)建菜單示例{super(title);mnNew.add(miC);mnNew.add(miJava);mnFile.add(mnNew);//將嵌套菜單mnNew加入到菜單mnFile上
mnFile.add(miOpen);mnFile.add(miSave);mnFile.addSeparator();mnFile.add(miExit); mnHelp.add(miAbout);menubar.add(mnFile);menubar.setHelpMenu(mnHelp); this.setMenuBar(menubar);this.setSize(200,150);this.setVisible(true);}publicstaticvoidmain(String[]args){newShortcutMenu("菜單的快捷鍵示例");}}【運(yùn)行結(jié)果】(如圖所示:按下Ctrl+X鍵時(shí),會(huì)退出窗體)GUI界面設(shè)計(jì)-內(nèi)容目錄GUI組件布局管理器Swing組件9.2布局管理器(LayoutManager)9.2.1什么是布局管理器布局(Layout)就是指組件在容器中分布情況。布局管理器(LayoutManager),是Java中用來管理組件的排列、位置、大小等分布屬性的類,Java通過對(duì)容器設(shè)置相應(yīng)的布局來實(shí)現(xiàn)不同的外觀。9.2.2為什么要使用布局管理器通常的編程語言,在控制GUI顯示時(shí)使用的是自身系統(tǒng)的坐標(biāo),例如VB的標(biāo)準(zhǔn)坐標(biāo)系統(tǒng)的原點(diǎn)在界面的左上角,X軸為水平方向,Y軸為垂直方向,如圖9-4所示。X軸Y軸(x,y)9.2布局管理器(LayoutManager)
一般的Windows編程語言在設(shè)置界面布局時(shí),組件的位置會(huì)嚴(yán)格按照這個(gè)坐標(biāo)系統(tǒng)(X,Y)來定位,這稱為“絕對(duì)坐標(biāo)定位”。一個(gè)GUI界面在Widnows平臺(tái)中可以正常顯示,但是移植到其它平臺(tái)時(shí)將會(huì)導(dǎo)致混亂,這也是一般編程語言不具備跨平臺(tái)能力的一個(gè)重要原因。Java處理GUI界面的方法是:將容器界面按照一定規(guī)則劃分為若干網(wǎng)格,然后根據(jù)網(wǎng)格中各單元格的位置及其相應(yīng)布局規(guī)則放入指定組件。這種根據(jù)單元格位置定位組件的方法稱為“相對(duì)坐標(biāo)定位”,因?yàn)檫@種方法與坐標(biāo)(X,Y)無關(guān),所以解決了跨平臺(tái)時(shí)的GUI界面顯示問題。3、常用的布局管理器常用的布局管理器主要有:FlowLayout(流水式布局)、BorderLayout(邊界式布局)、GridLayout(網(wǎng)格式布局)、CardLayout(卡片式布局)、GridBagLayout(網(wǎng)格袋式布局)。FlowLayout(流水式布局)一、FlowLayout(流水式布局)
1.布局特點(diǎn):FlowLayout把組件按照從左到右,從上到下的順序逐次排列,組件排滿容器的一行,會(huì)自動(dòng)切換到下一行繼續(xù)排列;是Panel類及其子類(如:Applet)的默認(rèn)布局。2.構(gòu)造方法:FlowLayout();構(gòu)造一個(gè)新的FlowLayout,組件居中對(duì)齊,默認(rèn)水平和垂直間距是5個(gè)像素。FlowLayout(intalign);構(gòu)造一個(gè)新的FlowLayout,對(duì)齊方式由align指定。FlowLayout(intalign,inthgap,intvgap);創(chuàng)建一個(gè)新的FlowLayout,具有指定的對(duì)齊方式align以及指定的水平間隙hgap和垂直間隙vgap。表9-2FlowLayout對(duì)齊參數(shù)字符串表示及其對(duì)應(yīng)常量值表Java.awt.FlowLayoutalign參數(shù)字符串表示對(duì)應(yīng)常量值LEFT0CENTER1RIGHT2LEADING3TRAILING4例9-6:流水式布局的作用importjava.awt.*;publicclassFlowLayoutDemoextendsFrame{Buttonb1=newButton("Button1");Buttonb2=newButton("Button2");Buttonb3=newButton("Button3");Buttonb4=newButton("Button4");Buttonb5=newButton("Button5");publicFlowLayoutDemo(Stringtitle){super(title);this.setLayout(newFlowLayout());//更改布局為流水式布局this.add(b1);//向容器中添加組件this.add(b2);this.add(b3);this.add(b4);this.add(b5);this.setSize(300,100);this.setVisible(true);}【運(yùn)行結(jié)果】(如圖所示:窗體包含5個(gè)按鈕,默認(rèn)時(shí)組件從左到右放置,并居中排列,組件排滿窗口的一行,自動(dòng)切換到下一行繼續(xù)排列,各組件之間的間隔為5個(gè)像素)例9-6:流水式布局的作用publicstaticvoidmain(String[]args){newFlowLayoutDemo("FlowLayouDemoexample!");}}BorderLayout
(邊界式布局)1.布局特點(diǎn):BorderLayout按照位置將容器劃分為5個(gè)區(qū)域:“North”、“South”、“West”、“East”、“Center”;分別代表:“上”、“下”、“左”、“右”、“中”5個(gè)位置;是Window類及其子類(如:Frame、Dialog)的默認(rèn)布局。2.構(gòu)造方法:BorderLayout();構(gòu)造一個(gè)的新邊界布局,組件之間沒有間距。BorderLayout(inthgap,intvgap);構(gòu)造一個(gè)邊界布局,并指定的組件之間的水平和垂直間距。3.邊界式布局實(shí)例:例9-7:邊界式布局的作用例9-7:邊界式布局的作用importjava.awt.*;publicclassBorderLayoutDemoextendsFrame{ButtonbtnNorth=newButton("North");ButtonbtnSouth=newButton("South");ButtonbtnWest=newButton("West");ButtonbtnEast=newButton("East");ButtonbtnCenter=newButton("Center");
publicBorderLayoutDemo(Stringtitle){super(title);this.add(btnNorth,"North");this.add(btnSouth,"South");this.add(btnWest,"West");this.add(btnEast,"East");this.add(btnCenter,"Center");this.setSize(200,150);this.setVisible(true); }例9-7:邊界式布局的作用publicstaticvoidmain(String[]args){newBorderLayoutDemo("BorderLayout示例!");}}【運(yùn)行結(jié)果】GridLayout(網(wǎng)格式布局)1、布局特點(diǎn):GridLayout將容器分隔成若干行列規(guī)則的網(wǎng)格,網(wǎng)格中各單元格大小完全一致,組件添加時(shí)按照“從左至右、先行后列”的方式排列,即組件先添加到網(wǎng)格的第一行的最左邊的單元格,然后依次向右排列,如果排滿一行就自動(dòng)切換到下一行繼續(xù)排列;2、構(gòu)造方法:GridLayout();創(chuàng)建具有默認(rèn)值的網(wǎng)格布局,即每個(gè)組件占據(jù)一行一列。GridLayout(introws,intcols);創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局。GridLayout(introws,intcols,inthgap,intvgap);創(chuàng)建具有指定行數(shù)和列數(shù)的網(wǎng)格布局,并指定組件行列間隔例9-8:網(wǎng)格式布局的作用importjava.awt.*;publicclassGridLayoutDemoextendsFrame{Button[]btn=newButton[10];Panelp=newPanel();publicGridLayoutDemo(Stringtitle){super(title);p.setLayout(newGridLayout(3,4,5,5));for(inti=0;i<10;i++){btn[i]=newButton(Integer.toString(i));p.add(btn[i]);} this.add(p); this.setSize(200,130); this.setVisible(true);}publicstaticvoidmain(String[]args){newGridLayoutDemo("GridLayout示例");}}CardLayout(卡片式布局)1、布局特點(diǎn):CardLayout將容器中的每個(gè)組件看作一張卡片。一次只能看到一張卡片,而容器充當(dāng)卡片的堆棧。第一個(gè)添加到CardLayout容器中的對(duì)象組件為可見組件。CardLayout提供了一組方法來瀏覽容器中的卡片。2、構(gòu)造方法:CardLayout();創(chuàng)建一個(gè)組件間隔大小為0的新卡片布局。CardLayout(inthgap,intvgap);創(chuàng)建一個(gè)組件之間具有指定的水平和垂直間隔的新卡片布局。9-9:設(shè)計(jì)一個(gè)包含兩個(gè)面板(卡片)的卡片式布局importjava.awt.*;importjava.awt.event.*;//導(dǎo)入了事件處理類包//本例需要實(shí)現(xiàn)事件處理功能,因此本窗口實(shí)現(xiàn)了ActionListener接口publicclassCardLayoutDemoextendsFrameimplementsActionListener{Panelp1,p2,p_card,p_btn;ButtonbtnPrev,btnNext;CardLayoutcard;publicCardLayoutDemo(Stringtitle){super(title);this.setLayout(newFlowLayout());//將本窗體改為流水布局p1=newPanel();p2=newPanel();p_card=newPanel();p_btn=newPanel();btnPrev=newButton("前一頁");btnNext=newButton("后一頁");card=newCardLayout();p_card.setLayout(card);//將面板p_card設(shè)為卡片布局p_btn.add(btnPrev);p_btn.add(btnNext);p1.add(newLabel("錦瑟無端五十弦,一弦一柱思華年。莊生曉夢(mèng)迷蝴蝶,望帝春心托杜鵑。"));p2.add(newLabel("滄海月明珠有淚,藍(lán)田日暖玉生煙。此情可待成追憶,只是當(dāng)時(shí)已憫然。"));9-9:設(shè)計(jì)一個(gè)包含兩個(gè)面板(卡片)的卡片式布局p_card.add("Previous",p1);//將面板p1添加到卡片布局面板p_card中
p_card.add("Next",p2);//將面板p2添加到卡片布局面板p_card中
this.add(p_card);this.add(p_btn);p_card.add(p1,"Previous");//將面板p1添加到卡片布局面板p_card中
p_card.add(p2,"Next");//將面板p2添加到卡片布局面板p_card中this.setSize(430,120);this.setVisible(true); }
publicvoidactionPerformed(ActionEvente)//實(shí)現(xiàn)ActionListener接口中的方法
{if(e.getSource()==btnPrev)//判斷是否觸發(fā)了btnPrev按鈕
{card.previous(p_card);//卡片容器p_card切換到前一張}if(e.getSource()==btnNext)//判斷是否觸發(fā)了btnNext按鈕
{card.next(p_card);//卡片容器p_card切換到下一張}}publicstaticvoidmain(String[]args){newCardLayoutDemo("CardLayout示例");}}9-9:設(shè)計(jì)一個(gè)包含兩個(gè)面板(卡片)的卡片式布局【運(yùn)行結(jié)果】(如圖所示:?jiǎn)螕舸绑w中的2個(gè)按鈕,上面的詩句會(huì)循環(huán)切換)GridBagLayout(網(wǎng)格袋式布局)1、布局特點(diǎn):GridBagLayout可以實(shí)現(xiàn)前面所有的布局效果,當(dāng)然它的構(gòu)造形式也相當(dāng)復(fù)雜,它需要先創(chuàng)建一個(gè)約束對(duì)象來確定各組件的布局約束形式,然后再按照約束布置組件。2、構(gòu)造方法:GridBagLayout();創(chuàng)建網(wǎng)格袋布局管理器的唯一形式。GridBagConstraints();創(chuàng)建網(wǎng)格袋約束的唯一形式。GridBagLayout(網(wǎng)格袋式布局)為網(wǎng)格袋布局面板pane添加一個(gè)按鈕button的大致構(gòu)造步驟如下:GridBagLayoutgridbag=newGridBagLayout();GridBagConstraintsc=newGridBagConstraints();pane.setLayout(gridbag);c.fill=GridBagConstraints.BOTH; //以下為網(wǎng)格袋約束對(duì)象設(shè)置約束屬性c.weightx=1.0; gridbag.setConstraints(button,c);pane.add(button);9.2.4容器嵌套(例9-10:調(diào)查卡程序)importjava.awt.*;publicclassAwtComponentextendsFrame{LabellabTip1=newLabel("姓名:");...TextFieldtxtName=newTextField(10);ChoicechoGrade=newChoice();ListlistAge=newList(3);CheckboxckbBacketball=newCheckbox("籃球");CheckboxckbBandmon=newCheckbox("羽毛球");CheckboxckbPingpang=newCheckbox(“乒乓球”);CheckboxGroupckg=newCheckboxGroup();CheckboxckbMale=newCheckbox("男",ckg,true);CheckboxckbFemale=newCheckbox("女",ckg,false);
TextAreataReduce=newTextArea(3,20);ButtonbtnSubmit=newButton("提交");ButtonbtnReset=newButton("重寫");Panelp1=newPanel();Panelp2=newPanel();Panelp3=newPanel();9.2.4容器嵌套
publicAwtComponent(Stringtitle){super(title);choGrade.add("???);...listAge.add("18");...p1.add(labTip1);...p2.add(labTip4);...p3.add(labTip6);...this.add(p1,"North");this.add(p2,"Center");this.add(p3,"South");this.pack();this.setVisible(true);}publicstaticvoidmain(String[]args){ newAwtComponent("調(diào)查卡程序");}}【運(yùn)行結(jié)果】參考圖9-29.2.5空布局(null)importjava.awt.*;publicclassNullLayoutDemoextendsFrame{Labellab1=newLabel("姓名:");...TextFieldt1=newTextField();...Buttonb1=newButton(“查詢”);...intx=0,y=0,w=0,h=0;ints_x=0,s_y=0;NullLayoutDemo(Stringtitle){super(title);9.2.5空布局(null)
setLayout(null);//設(shè)置空布局this.setSize(300,177);//注意:在此設(shè)置窗體大小this.setVisible(true);//注意:在此設(shè)置窗體顯示Insetsinsets=this.getInsets();//獲得窗體的Insets實(shí)例
w=this.getSize().width;//獲得窗體的寬度h=this.getSize().height;//獲得窗體的高度
x=(w-insets.left-insets.right)/4;//x值為窗體容器空間的四分之一
y=(h-insets.top-insets.bottom)/5;//y值為窗體容器空間的五分之一
s_x=insets.left;//獲得窗體左側(cè)的Insets值s_y=insets.top;//獲得窗體頂側(cè)的Insets值
//以下按順序向窗體添加組件
add(lab1);add(t1);add(lab2);add(t2);add(lab3);add(t3);add(lab4);add(t4);add(b1);add(b2);add(b3);add(b4);//逐個(gè)設(shè)置組件的位置和大小lab1.setBounds(0+s_x,0+s_y,x,y);t1.setBounds(x+s_x,0+s_y,3*x,y);lab2.setBounds(0+s_x,y+s_y,x,y);t2.setBounds(x+s_x,y+s_y,3*x,y);9.2.5空布局(null)lab3.setBounds(0+s_x,2*y+s_y,x,y);t3.setBounds(x+s_x,2*y+s_y,3*x,y);lab4.setBounds(0+s_x,3*y+s_y,x,y);t4.setBounds(x+s_x,3*y+s_y,3*x,y);b1.setBounds(0+s_x,4*y+s_y,x,y);b2.setBounds(x+s_x,4*y+s_y,x,y);b3.setBounds(2
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)間借款合同模板范文
- 網(wǎng)絡(luò)協(xié)議棧能耗控制-洞察闡釋
- 廠房拆遷及鄉(xiāng)村振興戰(zhàn)略實(shí)施協(xié)議
- 高新技術(shù)產(chǎn)業(yè)園區(qū)廠房轉(zhuǎn)租及知識(shí)產(chǎn)權(quán)保護(hù)合同
- 家庭用車過戶手續(xù)辦理及車輛保險(xiǎn)續(xù)保合同
- 保障性住房項(xiàng)目拆遷補(bǔ)償合同
- 車輛改裝企業(yè)股權(quán)轉(zhuǎn)讓與品牌合作協(xié)議
- 塑料和橡膠制造行業(yè)的可持續(xù)發(fā)展路徑研究-洞察闡釋
- 舞臺(tái)劇演出現(xiàn)場(chǎng)管理與場(chǎng)務(wù)支持協(xié)議
- 基于AR的烹飪步驟可視化與互動(dòng)演練-洞察闡釋
- 醫(yī)療器械設(shè)計(jì)開發(fā)到生產(chǎn)轉(zhuǎn)化
- 社區(qū)政審證明模板3篇
- 保護(hù)眼睛家長進(jìn)課堂
- 頸椎JOA腰椎JOA 評(píng)分-表格-日本骨科協(xié)會(huì)評(píng)估治療
- 人工智能時(shí)代小學(xué)勞動(dòng)教育的現(xiàn)實(shí)困境與突破路徑 論文
- 野生動(dòng)物管理學(xué)智慧樹知到答案章節(jié)測(cè)試2023年東北林業(yè)大學(xué)
- 質(zhì)量控制計(jì)劃(CP)
- 分子篩上課ppt版課件 6 應(yīng)用
- 深基坑專項(xiàng)施工方案(鋼板樁支護(hù))
- 20ZJ401 樓梯欄桿標(biāo)準(zhǔn)圖集
- 人教PEP版四年級(jí)英語下冊(cè)Unit 6 Shopping知識(shí)點(diǎn)歸納
評(píng)論
0/150
提交評(píng)論