Java語言程序的設(shè)計(jì)實(shí)用程第十三講圖形用戶界面_第1頁
Java語言程序的設(shè)計(jì)實(shí)用程第十三講圖形用戶界面_第2頁
Java語言程序的設(shè)計(jì)實(shí)用程第十三講圖形用戶界面_第3頁
Java語言程序的設(shè)計(jì)實(shí)用程第十三講圖形用戶界面_第4頁
Java語言程序的設(shè)計(jì)實(shí)用程第十三講圖形用戶界面_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、sisejava語言程序設(shè)計(jì)實(shí)用教程java語言程序設(shè)計(jì)實(shí)用教程sisejava語言程序設(shè)計(jì)實(shí)用教程第13講 圖形用戶界面sisejava語言程序設(shè)計(jì)實(shí)用教程3本章學(xué)習(xí)要點(diǎn):l識(shí)別用戶界面屏幕的組件以及主要的類l理解布局管理器,在用戶接口上組織組件l理解事件監(jiān)聽器,理解委派事件模型l掌握java圖形用戶界面開發(fā)方法sisejava語言程序設(shè)計(jì)實(shí)用教程13.1 圖形用戶界面組件sisejava語言程序設(shè)計(jì)實(shí)用教程圖形用戶界面gui (見p349圖13-1) l至今為止所編寫的java程序只能從鍵盤輸入,在控制臺(tái)屏幕上顯示結(jié)果。l圖形用戶界面(gui,graphical user interfac

2、e)是為應(yīng)用程序提供一個(gè)圖形化的界面,程序通過gui與用戶交互,gui能使一個(gè)應(yīng)用程序具有與眾不同的“外觀”與“感覺”,是目前應(yīng)用程序大多數(shù)是采用的方式。 winui:標(biāo)準(zhǔn)的ms windows或x-windows的應(yīng)用系統(tǒng),應(yīng)用使用來自操作系統(tǒng)的gui元素和其它加入的元素webui:web應(yīng)用系統(tǒng),基于瀏覽器操作sisejava語言程序設(shè)計(jì)實(shí)用教程java程序圖形界面的坐標(biāo)設(shè)置程序圖形界面的坐標(biāo)設(shè)置原點(diǎn)(0,0)x軸y軸sisejava語言程序設(shè)計(jì)實(shí)用教程用戶圖形接口awtl awt(abstract window toolkit)是一個(gè)獨(dú)立平臺(tái)的窗口工具組件集,它依賴于對(duì)等組件(peer)

3、,而對(duì)等組件是一個(gè)本地本地gui組件組件,由awt類管理。awt的作用是給用戶提供基本的界面組件,如按鈕、列表框、菜單等。l awt最初只包括與本地對(duì)等組件相關(guān)聯(lián)的組件,稱為稱為重量組件(重量組件(heavyweight component),這些組件在它們自己的本地不透明窗口中繪制,用awt創(chuàng)建的應(yīng)用外觀在不同的操作系統(tǒng)平臺(tái)上是不同外觀在不同的操作系統(tǒng)平臺(tái)上是不同。 sisejava語言程序設(shè)計(jì)實(shí)用教程用戶圖形接口swingl java基類(java foundation classes,jfc)是關(guān)于gui組件和服務(wù)的完整集合,主要由5個(gè)api構(gòu)成:awt、swing、java 2d、dr

4、ag and drop、accessibilityl swing是建立在awt基礎(chǔ)之上的,它利用了awt的底層組件,包括圖形、顏色、字體、工具包和布局管理器等。使用使用awt最好的部分來建立一個(gè)新的最好的部分來建立一個(gè)新的輕量組件集,而丟棄了輕量組件集,而丟棄了awt中有問題的重量組件中有問題的重量組件部分部分。 l 通過引入新特性和豐富的功能,swing提供了比提供了比awt更全面的組件集合。更全面的組件集合。swing api是圍繞實(shí)現(xiàn)awt各個(gè)部分的api構(gòu)建的,這保證了所有早期的awt組件仍然可以使用。sisejava語言程序設(shè)計(jì)實(shí)用教程jfc的兩個(gè)特性l javax.swing.pl

5、af:提供一個(gè)接口和許多抽象類,swing 用它們來提供自己的可插入外觀功能可插入外觀功能。例如可用提供本地操作系統(tǒng)的外觀,在windows上執(zhí)行應(yīng)用,看上去像是專為windows環(huán)境定制,其它linux、unix也類似。 l 拖拽與放置拖拽與放置(drag-and-drop):把數(shù)據(jù)從源 轉(zhuǎn)變到目標(biāo)。源和目標(biāo)可以是兩個(gè)不同應(yīng)用的控件,還可在剪貼板之間來回傳遞數(shù)據(jù)。java.awt.dnd和java.awt.datatransfer包可用于拖拽與放置操作sisejava語言程序設(shè)計(jì)實(shí)用教程基本概念 l組件組件(component):可視化控件,例如文本框、復(fù)選框、列表框、按鈕等稱為組件,是是

6、java的圖形用戶的圖形用戶界面的最基本組成部分界面的最基本組成部分,組件不能獨(dú)立地顯示出來,必須將組件放在一定的容器中才可以顯示出來l容器容器(container):容器是一種特殊的組件,一種能夠容納其他組件或容器的組件。每個(gè)組件繼承它的父容器的性質(zhì),如字體、顏色容器控制存放在其中的組件的位置l布局管理器布局管理器(layout manager):為了使圖形用戶界面具有良好的平臺(tái)無關(guān)性,提供了專門用來管理組件在容器中的布局的工具。sisejava語言程序設(shè)計(jì)實(shí)用教程java常用控件介紹textbox文本框,接收單行字符串輸入textarea文本區(qū),接收多行字符串的輸入push button按

7、鈕,觸發(fā)一系列動(dòng)作label標(biāo)題,在容器上顯示靜態(tài)文本check box復(fù)選框,接收yes/no值的數(shù)據(jù),可多選radio button單選按鈕,只允許從一組選項(xiàng)中選擇一個(gè)combo box下拉列表框,只允許單選,可輸入新值list box列表框,允許多選,不可輸入新值sisejava語言程序設(shè)計(jì)實(shí)用教程swing組件組件基本控制基本控制buttonslistmenuslidertext fieldscombo boxsisejava語言程序設(shè)計(jì)實(shí)用教程swing組件組件信息顯示信息顯示labelprogress bartool tipsisejava語言程序設(shè)計(jì)實(shí)用教程swing組件組件可編

8、輯格式化信息顯示可編輯格式化信息顯示color choosertablefile choosertexttreesisejava語言程序設(shè)計(jì)實(shí)用教程swing程序舉例程序舉例import javax.swing.*; public class helloworldswing public static void main(string args) jframe frame = new jframe(helloworldswing); final jlabel label = new jlabel(hello world); frame.getcontentpane().add(label);

9、frame.addwindowlistener(new windowadapter() public void windowclosing(windowevent e) system.exit(0); ); frame.pack(); frame.setvisible(true); sisejava語言程序設(shè)計(jì)實(shí)用教程swing應(yīng)用程序基本結(jié)構(gòu)應(yīng)用程序基本結(jié)構(gòu)l引入引入swing 包包:import javax.swing.import javax.swing.* *; ; import java.awt.import java.awt.* *; ; import java.awt.event

10、. import java.awt.event.* *; ; l選擇選擇look&feell設(shè)置窗口布局設(shè)置窗口布局l設(shè)置窗口容器設(shè)置窗口容器jframe、jpanell設(shè)置設(shè)置swing組件,將其加入組件,將其加入jpanell注意:注意:jframe的默認(rèn)大小為的默認(rèn)大小為00并且是不可見的,用并且是不可見的,用setbounds方法設(shè)置框架的大小,方法設(shè)置框架的大小,setvisible(true)顯示窗口顯示窗口sisejava語言程序設(shè)計(jì)實(shí)用教程swing中的中的look&feelcde/motif look and feelwindows look and feel

11、java look and feel sisejava語言程序設(shè)計(jì)實(shí)用教程swing中的中的look&feell使用使用uimanager.setlookandfeel( )uimanager.setlookandfeel( ) 方法進(jìn)行設(shè)置。方法進(jìn)行設(shè)置。在該方法中可以使用的參數(shù):在該方法中可以使用的參數(shù):uimanager.getcrossplatformlookandfeelclassname()uimanager.getcrossplatformlookandfeelclassname() - java look & feel. uimanager.getsysteml

12、ookandfeelclassname()uimanager.getsystemlookandfeelclassname() 當(dāng)前平臺(tái)的當(dāng)前平臺(tái)的look&feeljavax.swing.plaf.metal.metallookandfeeljavax.swing.plaf.metal.metallookandfeel -java look & feel. com.sun.java.swing.plaf.windows.windowslookandfeelcom.sun.java.swing.plaf.windows.windowslookandfeel - windows l

13、ook & feel. com.sun.java.swing.plaf.motif.motiflookandfeelcom.sun.java.swing.plaf.motif.motiflookandfeel - cde/motif look & feel. javax.swing.plaf.mac.maclookandfeeljavax.swing.plaf.mac.maclookandfeel - mac os look & feelsisejava語言程序設(shè)計(jì)實(shí)用教程swing組件層次結(jié)構(gòu)(組件層次結(jié)構(gòu)(p351)java.awt.containerjavax.s

14、wing.jcomponentjtextcomponentabstractbuttonjpaneljcomboboxjlabeljtreejtextareajtextfieldjpasswordfieldjtogglebuttonjbuttonjmenuitemjcheckboxjradiobuttonsisejava語言程序設(shè)計(jì)實(shí)用教程jcomponentl 組件類的層次結(jié)構(gòu)組件類的層次結(jié)構(gòu)java.lang.object | +-java.awt.component | +-java.awt.container | +-javax.swing.jcomponentl jcomponent大

15、多數(shù)大多數(shù)swing組件類父類組件類父類sisejava語言程序設(shè)計(jì)實(shí)用教程一些gui組件l 標(biāo)簽標(biāo)簽(jlabel)l 文本框文本框(jtextfield)l 按鈕按鈕(jbutton)l 復(fù)選框復(fù)選框(jcheckbox)l 組合框組合框(jcombobox)l 文本文本(jtextarea)l 框架框架(jframe)l 面板面板(jpanel)sisejava語言程序設(shè)計(jì)實(shí)用教程標(biāo)簽(jlabel)l 標(biāo)簽標(biāo)簽q為為gui提供文本提供文本(主要主要)或圖像或圖像(也可以也可以)信息信息q對(duì)應(yīng)類對(duì)應(yīng)類(jlabel) (jcomponent的子類的子類)q可以顯示可以顯示:q單行的只讀的

16、文本信息單行的只讀的文本信息q圖像圖像q同時(shí)顯示文本與圖像信息同時(shí)顯示文本與圖像信息q程序一般不修改標(biāo)簽的內(nèi)容程序一般不修改標(biāo)簽的內(nèi)容用法:用法:jlabel label=new jlabel(“標(biāo)簽名標(biāo)簽名”); panel.add(label) ;/將標(biāo)簽加入容器將標(biāo)簽加入容器sisejava語言程序設(shè)計(jì)實(shí)用教程文本框(jtextfield)l 文本框文本框(jtextfield)q顯示單行的文本信息顯示單行的文本信息qjtextfield extends jtextcomponentl 密碼框密碼框(jpasswordfield)q輸入的字符顯示為輸入的字符顯示為“*”l 用法舉例:用法

17、舉例:jtextfield textobj=new jtextfield(10);10指定文本域的長(zhǎng)度指定文本域的長(zhǎng)度 panel.add(textobj);textobj.settext(“yyyy-mm-dd”);string date=textobj.gettext();sisejava語言程序設(shè)計(jì)實(shí)用教程按鈕(jbutton)l 當(dāng)鼠標(biāo)左鍵單擊按鈕組件時(shí),能觸發(fā)特定的事當(dāng)鼠標(biāo)左鍵單擊按鈕組件時(shí),能觸發(fā)特定的事件件l 在在java中中, 廣義的按鈕包括廣義的按鈕包括:q命令式按鈕命令式按鈕(jbutton)q復(fù)選框復(fù)選框(jcheckbox)q單選按鈕單選按鈕(jradiobutton)

18、用法舉例:用法舉例:checkboxgroup cbg=new checkboxgroup();checkbox check1=new checkbox(“check1,cbg,true); checkbox check2= new checkbox(“check2,cbg,false); panel.add(check1);panel.add(check2);sisejava語言程序設(shè)計(jì)實(shí)用教程組合框(jcombobox)l 組合框組合框(jcombobox)q可以從下拉式的列表框中選取其中的列表項(xiàng)可以從下拉式的列表框中選取其中的列表項(xiàng)q有時(shí)也稱為下拉框有時(shí)也稱為下拉框(drop-down

19、list)l 類類jcombobox中的方法中的方法qgetselectedindex( )q返回當(dāng)前被選中的項(xiàng)返回當(dāng)前被選中的項(xiàng)qsetmaximumrowcount(n)q設(shè)置最多顯示列表項(xiàng)的項(xiàng)數(shù)設(shè)置最多顯示列表項(xiàng)的項(xiàng)數(shù)q滾動(dòng)條滾動(dòng)條(scrollbar)會(huì)自動(dòng)加上會(huì)自動(dòng)加上sisejava語言程序設(shè)計(jì)實(shí)用教程滑動(dòng)條(jslider)l 滑動(dòng)條滑動(dòng)條(jslider)提供了以圖形方式進(jìn)行數(shù)值選取提供了以圖形方式進(jìn)行數(shù)值選取的功能。的功能。l 可以用來表示程序執(zhí)行的進(jìn)度情況??梢杂脕肀硎境绦驁?zhí)行的進(jìn)度情況。sisejava語言程序設(shè)計(jì)實(shí)用教程ljava.awt.container是compo

20、nent的子類,一個(gè)容器可以容納多個(gè)組件,并使它們成為一個(gè)整體。容器可以簡(jiǎn)化圖形化界面的設(shè)計(jì),以整體結(jié)構(gòu)來布置界面。所有的容器都可以通過add()方法向容器中添加組件。lswing的容器分頂層容器和其它容器,一下為三個(gè)頂層組件:容器(container)技術(shù)介紹appletdialogframesisejava語言程序設(shè)計(jì)實(shí)用教程swing組件組件通用容器通用容器panel scroll panesplit panetool bartabbed panesisejava語言程序設(shè)計(jì)實(shí)用教程框架(jframe)l 類類 jframe 是是java.awt.frame的子類的子類l 在在swing

21、的組件中的組件中, jframe 并不全是由并不全是由java編寫的編寫的q是一種與平臺(tái)關(guān)系比較密切的組件是一種與平臺(tái)關(guān)系比較密切的組件(heavyweight component)java.lang.object | +-java.awt.component | +-java.awt.container | +-java.awt.window | +-java.awt.frame | +-javax.swing.jframesisejava語言程序設(shè)計(jì)實(shí)用教程設(shè)置窗口容器設(shè)置窗口容器ljframe類似于類似于frame ,jframe是是awt中中frame的子類。的子類。l不能直接向不能直

22、接向jframe中加入組件,中加入組件,而要向而要向jframe的的content pane或向另外提供的新的或向另外提供的新的content pane中增加組件。中增加組件。=content pane中包含除了中包含除了menu bar之外的所有組件。之外的所有組件。getcontentpane() 獲取獲取jframe的的content pane;setcontentpane() 設(shè)置設(shè)置content panesisejava語言程序設(shè)計(jì)實(shí)用教程面板(jpanel)q一種中間容器,用來組成其它組件一種中間容器,用來組成其它組件q可以添加各種組件可以添加各種組件(包括面板組件包括面板組件)

23、q面板面板(jpanel)的大小由它所包含的組件決定的大小由它所包含的組件決定q當(dāng)組件個(gè)數(shù)增加,面板當(dāng)組件個(gè)數(shù)增加,面板(jpanel)也會(huì)隨之而增大也會(huì)隨之而增大sisejava語言程序設(shè)計(jì)實(shí)用教程設(shè)置設(shè)置swing組件組件frame = new jframe(.); button = new jbutton(.);label = new jlabel(.); pane = new jpanel(); pane.add(button); pane.add(label); frame.getcontentpane().add(pane,borderlayout.center); sisejav

24、a語言程序設(shè)計(jì)實(shí)用教程建立建立swing guil swing包中定義了兩類組件:包中定義了兩類組件: 頂層容器(頂層容器(jframe,japplet,jwindow,jdialog) 輕型組件(輕型組件(j開頭的所有組件,如開頭的所有組件,如jbutton,jpanel,jmenu等)等)l一般如果使用一般如果使用swing組件,則程序中只使用組件,則程序中只使用swing組件組件 和和swing容器。容器。l swing組件可以加入到一個(gè)與頂層容器相關(guān)的組件可以加入到一個(gè)與頂層容器相關(guān)的content pane中,而不能直接加入到頂層容器中。中,而不能直接加入到頂層容器中。sisejav

25、a語言程序設(shè)計(jì)實(shí)用教程13.2 布局管理器sisejava語言程序設(shè)計(jì)實(shí)用教程布局管理器布局管理器-layoutmanagerljava為了實(shí)現(xiàn)跨平臺(tái)的特性并且獲得動(dòng)態(tài)的布局效果,為了實(shí)現(xiàn)跨平臺(tái)的特性并且獲得動(dòng)態(tài)的布局效果,java將容器內(nèi)的所有組件安排給一個(gè)將容器內(nèi)的所有組件安排給一個(gè)“布局管理器布局管理器”負(fù)負(fù)責(zé)管理,如:責(zé)管理,如:排列順序,組件的大小、位置排列順序,組件的大小、位置,當(dāng)窗口移,當(dāng)窗口移動(dòng)或調(diào)整大小后組件如何變化等功能授權(quán)給對(duì)應(yīng)的容器動(dòng)或調(diào)整大小后組件如何變化等功能授權(quán)給對(duì)應(yīng)的容器布局管理器來管理。布局管理器來管理。l不同的布局管理器使用不同算法和策略,容器可以通過不同的

26、布局管理器使用不同算法和策略,容器可以通過選擇不同的布局管理器來決定布局。選擇不同的布局管理器來決定布局。sisejava語言程序設(shè)計(jì)實(shí)用教程布局管理器的類型 java中的布局類型包括以下幾種:- flowlayout(流式布局)(流式布局)- borderlayout (邊界布局)(邊界布局) - gridlayout(網(wǎng)格布局)(網(wǎng)格布局)- cardlayout (卡片布局)(卡片布局)- gridbaglayout(高級(jí)方格式界面設(shè)計(jì))(高級(jí)方格式界面設(shè)計(jì))- boxlayout(盒式界面設(shè)計(jì)):由(盒式界面設(shè)計(jì)):由swing包提供包提供 - - null(空布局)(空布局)sise

27、java語言程序設(shè)計(jì)實(shí)用教程flowlayout布局管理器l flowlayout 是panel、jpanel、applet的缺省布局管理器。其組件的放置規(guī)律是從上到下、從左到右進(jìn)行放置其組件的放置規(guī)律是從上到下、從左到右進(jìn)行放置。如如果容器足夠?qū)?,第一個(gè)組件先添加到容器中第一行的最果容器足夠?qū)?,第一個(gè)組件先添加到容器中第一行的最左邊,后續(xù)的組件依次添加到上一個(gè)組件的右邊,如果左邊,后續(xù)的組件依次添加到上一個(gè)組件的右邊,如果當(dāng)前行已放置不下該組件,則放置到下一行的最左邊當(dāng)前行已放置不下該組件,則放置到下一行的最左邊。 l 當(dāng)容器的大小發(fā)生變化時(shí),用flowlayout管理的組件會(huì)發(fā)生變化,其變

28、化規(guī)律是:組件的大小不變,但是相對(duì)位置會(huì)發(fā)生變化。例如有三個(gè)按鈕都處于同一行,但是如果把該窗口變窄,窄到剛好能夠放下一個(gè)按鈕,則第二個(gè)按鈕將折到第二行,第三個(gè)按鈕將折到第三行。sisejava語言程序設(shè)計(jì)實(shí)用教程flowlayout布局管理器l flowlayout的構(gòu)造函數(shù)有:- flowlayout( ):生成一個(gè)默認(rèn)的流式布局生成一個(gè)默認(rèn)的流式布局- flowlayout(int alignment):可以設(shè)定每一行組可以設(shè)定每一行組件的對(duì)齊方式件的對(duì)齊方式 - flowlayout(int alignment,int horz,int vert):可可以指定對(duì)齊方式,設(shè)定組件間的水平和

29、垂直距離以指定對(duì)齊方式,設(shè)定組件間的水平和垂直距離l 對(duì)齊方式參數(shù)的含義:sisejava語言程序設(shè)計(jì)實(shí)用教程l flowlayout(flowlayout.right,20,40);/*第一個(gè)參數(shù)表示組件的對(duì)齊方式,指組件在這一行中的位置是第一個(gè)參數(shù)表示組件的對(duì)齊方式,指組件在這一行中的位置是居中對(duì)齊、居右對(duì)齊還是居左對(duì)齊居中對(duì)齊、居右對(duì)齊還是居左對(duì)齊,第二個(gè)參數(shù)是組件之間的,第二個(gè)參數(shù)是組件之間的橫向間隔,第三個(gè)參數(shù)是組件之間的縱向間隔,單位是象素。橫向間隔,第三個(gè)參數(shù)是組件之間的縱向間隔,單位是象素。*/l flowlayout(flowlayout.left); /居左對(duì)齊,橫向間隔和

30、縱向間隔都是缺省值居左對(duì)齊,橫向間隔和縱向間隔都是缺省值5個(gè)象素個(gè)象素l flowlayout(); /缺省的對(duì)齊方式居中對(duì)齊,橫向間隔和縱向間缺省的對(duì)齊方式居中對(duì)齊,橫向間隔和縱向間隔都是缺省值隔都是缺省值5個(gè)象素個(gè)象素 flowlayout mylayout = new flowlayout();flowlayout exlayout = new flowlayout(flowlayout.right);setlayout(exlayout); / 為容器為容器設(shè)置新布局設(shè)置新布局 構(gòu)造方法說明構(gòu)造方法說明sisejava語言程序設(shè)計(jì)實(shí)用教程(p355,演示),演示)sisejava語言程

31、序設(shè)計(jì)實(shí)用教程l 網(wǎng)格布局管理器以矩形網(wǎng)管形式對(duì)容器的組件進(jìn)行布置。l 容器被分成大小相等的矩形格子,一個(gè)矩形格子中放置一個(gè)組件,從左到右,自頂向下地放置。l gridlayout的構(gòu)造函數(shù)如下所示:q gridlayout():生成一個(gè)單列的網(wǎng)格布局q gridlayout(int row,int col):生成一個(gè)設(shè)定行數(shù)和列數(shù)的網(wǎng)格布局q gridlayout(int row,int col,int horz,int vert):可以設(shè)置組件之間的水平和垂直間隔gridlayout布局管理器sisejava語言程序設(shè)計(jì)實(shí)用教程示例(演示). . . button btn; / 聲明按鈕數(shù)

32、組聲明按鈕數(shù)組 string str=1,2,3,4,5,6,7,8,9; setlayout(new gridlayout(3,3); btn=new buttonstr.length; / 創(chuàng)建按鈕數(shù)組創(chuàng)建按鈕數(shù)組 for(int i=0;istr.length;i+) btni=new button(stri); add(btni); sisejava語言程序設(shè)計(jì)實(shí)用教程l borderlayout 是frame、jframe、dialog和japplet的缺省布局管理器。borderlayout布局管理器把容器分成5個(gè)區(qū)域:north,south,east,west和center,每個(gè)

33、區(qū)域只能放置一個(gè)組件。borderlayout布局管理器centernorthsouthwesteastsisejava語言程序設(shè)計(jì)實(shí)用教程lborderlayout() :構(gòu)造一個(gè)組件之間沒有間距的新邊界布局。 lborderlayout(int hgap, int vgap) :指定組件之間的水平、垂直間距來構(gòu)造一個(gè)邊界布局。 例如:f.setlayout(new borderlayout();f.add(north, new button(north);/第一個(gè)參數(shù)表示把按鈕添加到容器的north區(qū)域 構(gòu)造方法構(gòu)造方法sisejava語言程序設(shè)計(jì)實(shí)用教程例子(演示). . . . . .

34、 setlayout(new borderlayout(); setlayout(new borderlayout(); button btneast=new button(button btneast=new button(東東);); button btnwest=new button(button btnwest=new button(西西);); button btnnorth=new button(button btnnorth=new button(北北);); button btnsouth=new button(button btnsouth=new button(南南););

35、 button btncenter=new button(button btncenter=new button(中中);); add(btneast,borderlayout.east);add(btneast,borderlayout.east); add(btnwest,borderlayout.west); add(btnwest,borderlayout.west); add(btnnorth,borderlayout.north); add(btnnorth,borderlayout.north); add(btnsouth,borderlayout.south); add(btn

36、south,borderlayout.south); add(btncenter,borderlayout.center); add(btncenter,borderlayout.center);sisejava語言程序設(shè)計(jì)實(shí)用教程l在使用borderlayout的時(shí)候,如果容器的大小發(fā)生變化,其變化規(guī)律為:組件的相對(duì)位置不變,大小發(fā)生變化。例如:l容器變高了,則north、south區(qū)域不變,west、center、east區(qū)域變高;l如果容器變寬了,west、east區(qū)域不變,north、center、south區(qū)域變寬。l不一定所有的區(qū)域都有組件,如果四周的區(qū)域(west、east、no

37、rth、south區(qū)域)沒有組件,則由center區(qū)域去補(bǔ)充,但是如果center區(qū)域沒有組件,則保持空白borderlayout內(nèi)的組件變化特性內(nèi)的組件變化特性sisejava語言程序設(shè)計(jì)實(shí)用教程cardlayout布局管理器(p358,演示)l 卡片布局是把組件安排到不同的卡片容器中,這個(gè)卡片容這個(gè)卡片容器相互重疊,但一次只能顯示一個(gè)組件器相互重疊,但一次只能顯示一個(gè)組件,因此也稱之為“聯(lián)合布局(combining layouts)”,該布局管理器會(huì)自動(dòng)改變?cè)谐叽?,充滿整個(gè)空間,在添加組件時(shí)需要給組件起個(gè)在添加組件時(shí)需要給組件起個(gè)名稱,以便與以后直接通過名稱調(diào)用組件。名稱,以便與以后直接

38、通過名稱調(diào)用組件。l 每當(dāng)需要許多面板切換,而每個(gè)面板需要顯示為不同布局時(shí),可以使用卡片布局。l 卡片布局提供了兩種方式顯示組件一種是通過public void show(container parent,string name);另一種是根據(jù)組件添加的順序直接調(diào)用first(container parent),next(container parent),previous(container parent),last(container parent)4個(gè)方法來顯示組件 sisejava語言程序設(shè)計(jì)實(shí)用教程l boxlayout是swing提供的布局管理器,它有兩種排列方式,一種是水平的,另

39、一種是垂直的。我們可以使用boxlayout提供的兩個(gè)常量x_axis、y_axis來指明組件在容器中是水平還是垂直排列的。l 構(gòu)造方法:構(gòu)造方法: boxlayout(container con, int axis) q boxlayout.x_axis或或boxlayout.y_axisboxlayout布局管理器sisejava語言程序設(shè)計(jì)實(shí)用教程gridbaglayout類與gridbagconstraints類lgridbaglayout 是一個(gè)靈活的布局管理器,借助于gridbagconstraints類,實(shí)現(xiàn)更靈活的外觀管理,提供具有不同大小的行和列來放置組件,每個(gè)單提供具有不同

40、大小的行和列來放置組件,每個(gè)單元大小可不同。元大小可不同。 l方法:使用gridbagconstraints對(duì)象來確定組件的大小和位置約束,然后將其加入gridbaglayout 對(duì)象中button1 button2 button3button8button5button6button7button4button9sisejava語言程序設(shè)計(jì)實(shí)用教程1. gridbaglayout gbl=new gridbaglayout(); /只有一種無參構(gòu)造方法2. panel.setlayout(gbl); 3. gridbagconstraints q=new gridbagconstraints

41、();4. /配置約束對(duì)象5. q.*=*;6. 7. gbl.setconstraints(component, q); /將組件component按照約束q設(shè)置8. panel.add(component);具體的使用方式(具體的使用方式(p359)sisejava語言程序設(shè)計(jì)實(shí)用教程常用的約束條件一常用的約束條件一lfill屬性:當(dāng)組件的顯示區(qū)域大于組件大小時(shí)的顯示方式。該屬性必須與weighttx和weighty屬性一起使用q默認(rèn)值為gridbagconstraints.none,表示組件大小不變 ;qgridbagconstraints.horizontal表示將組件拉寬到與單元格寬

42、度相同;qgridbagconstraints.vertical表示將組件的高度提升到與單元格高度一致;qgridbagconstraints.both表示將組件的高度和寬度都拉伸到與單元格一致.lboxlayout屬性允許縱向或橫向布置多個(gè)組件的布局管理器sisejava語言程序設(shè)計(jì)實(shí)用教程常用的約束條件二常用的約束條件二lgridwidth,gridheight屬性:指定組件所占的單元格的數(shù)量,默認(rèn)值皆為1. gridwidth表示橫向單元格數(shù)量;gridheight表示縱向單元格數(shù)量.lgridx,gridy屬性:指定組件所在單元格的位置. gridx表示列數(shù); gridy表示行數(shù).lw

43、eightx,weighty屬性:指定當(dāng)圖形窗口擴(kuò)大時(shí),各單元格如何分配被擴(kuò)大的空間.weightx表示橫向擴(kuò)大權(quán)重,weighty表示縱向擴(kuò)大權(quán)重.lipadx,ipady屬性:指定組件內(nèi)部的填充寬度和高度.linsets屬性:指定組件和單元格之間的空隙.lanchor屬性:指定當(dāng)組件小于單元格時(shí)的放置方式.sisejava語言程序設(shè)計(jì)實(shí)用教程null布局管理器l 當(dāng)用戶不想使用布局管理器,需要自己設(shè)置組件的位置和大小時(shí),可以把容器的布局設(shè)置為可以把容器的布局設(shè)置為null布局布局。l 向空布局的容器添加組建時(shí)需要下列兩個(gè)步驟:l 使用add(c)方法向容器中添加組件c;l 組件調(diào)用setb

44、ounds(int x,int y,int width,int height)方法設(shè)置該組件在容器中的位置。l 需要注意的是,這種方法會(huì)導(dǎo)致程序與系統(tǒng)相關(guān),如不同的分辨率會(huì)產(chǎn)生不同的效果。sisejava語言程序設(shè)計(jì)實(shí)用教程小結(jié):布局管理(一)l flowlayout: 組件在一行中從左至右水平排列,排滿后折行,缺省的panel布局管器l borderlayout:北、南、東、西、中,缺省的窗口容器的管理器l cardlayout:每一個(gè)組件作為一個(gè)卡片,容器僅顯示多個(gè)卡片中的某一個(gè)l gridlayout:以行和列的網(wǎng)格形式安排組件l gridbaglayout:使用復(fù)雜、功能靈活sisej

45、ava語言程序設(shè)計(jì)實(shí)用教程小結(jié):布局管理(二)l frame是一個(gè)頂級(jí)窗口。是一個(gè)頂級(jí)窗口。frame的缺省布局管理器為的缺省布局管理器為borderlayout。l panel 無法單獨(dú)顯示,必須添加到某個(gè)容器中。無法單獨(dú)顯示,必須添加到某個(gè)容器中。 panel 的的缺省布局管理器為缺省布局管理器為flowlayout。l 當(dāng)把當(dāng)把panel 作為一個(gè)組件添加到某個(gè)容器中后,該作為一個(gè)組件添加到某個(gè)容器中后,該panel 仍然可以有自己的布局管理器。因此,可以利用仍然可以有自己的布局管理器。因此,可以利用panel 使使得得borderlayout 中某個(gè)區(qū)域顯示多個(gè)組件,達(dá)到設(shè)計(jì)復(fù)中某個(gè)區(qū)

46、域顯示多個(gè)組件,達(dá)到設(shè)計(jì)復(fù)雜用戶界面的目的雜用戶界面的目的 。l 如果采用無布局管理器如果采用無布局管理器 setlayout(null),則必須使用,則必須使用setlocation(),setsize(),setbounds()等方法手工設(shè)置組等方法手工設(shè)置組件的大小和位置,此方法會(huì)導(dǎo)致平臺(tái)相關(guān),不鼓勵(lì)使用。件的大小和位置,此方法會(huì)導(dǎo)致平臺(tái)相關(guān),不鼓勵(lì)使用。 sisejava語言程序設(shè)計(jì)實(shí)用教程13.3 處理事件sisejava語言程序設(shè)計(jì)實(shí)用教程幾個(gè)有用的概念l 事件 描述用戶所執(zhí)行的操作,描述用戶所執(zhí)行的操作,在java.awt.event包中定義了若干類型的事件若干類型的事件(例如點(diǎn)

47、擊鼠標(biāo)、按下鍵盤、關(guān)閉窗口)(例如點(diǎn)擊鼠標(biāo)、按下鍵盤、關(guān)閉窗口)l 監(jiān)聽者接口 特定類型的listener接口,用于監(jiān)聽特定類型的事件l 監(jiān)聽者類 是實(shí)現(xiàn)了某種監(jiān)聽者接口的類,由編程者定義l 事件監(jiān)聽者 是某個(gè)監(jiān)聽者類的對(duì)象,由編程者使用new創(chuàng)建sisejava語言程序設(shè)計(jì)實(shí)用教程awt事件處理的基本概念和流程l 事件源用戶在各種場(chǎng)合進(jìn)行的各項(xiàng)操作,如敲擊鍵盤或用鼠標(biāo)點(diǎn)擊某個(gè)組件等。事件源指的是產(chǎn)生事件的對(duì)象事件源指的是產(chǎn)生事件的對(duì)象。l 事件對(duì)象對(duì)于不同的事件源,java虛擬機(jī)會(huì)產(chǎn)生相應(yīng)類型的事件對(duì)象。java自動(dòng)識(shí)別各種不同的事件對(duì)象的類型并進(jìn)行分類處理。l 事件處理(監(jiān)聽)器接口各種類

48、型的事件均有對(duì)應(yīng)的事件處理器接口事件處理器接口。該接口封裝了與其對(duì)應(yīng)類該接口封裝了與其對(duì)應(yīng)類型事件的各種處理方法,型事件的各種處理方法,并建立了事件到相應(yīng)處理并建立了事件到相應(yīng)處理方法的自動(dòng)映射。方法的自動(dòng)映射。sisejava語言程序設(shè)計(jì)實(shí)用教程事件處理模型l基于授權(quán)事件模型:q 事件來源對(duì)象事件來源對(duì)象s因用戶進(jìn)行操作(鼠標(biāo)或鍵盤)q 系統(tǒng)會(huì)自動(dòng)觸發(fā)此事件類對(duì)象事件類對(duì)象e,并通知所授權(quán)的事件監(jiān)聽者l(需事先調(diào)用來源對(duì)象的addxxxlistener方法向l注冊(cè)),q 事件監(jiān)聽者事件監(jiān)聽者l中有處理各種事件的方法(事件處理者1n)便會(huì)處理此事件e的各種狀況 。sisejava語言程序設(shè)計(jì)實(shí)

49、用教程編程的基本方法(重點(diǎn))1. 對(duì)java.awt中組件實(shí)現(xiàn)事件處理必須使用java.awt.event包,所以在程序開始應(yīng)加入import java.awt.event.*語句。2. 定義事件監(jiān)聽者類,有兩種方法(): 2.1.實(shí)現(xiàn)事件所對(duì)應(yīng)的接口接口xxlistener,并重寫接口中的全部方法全部方法(即使不需要的方法也必須定義,可定義為空方法)。 2.2. 繼承事件對(duì)應(yīng)的抽象適配器抽象適配器(adapter)類類,重寫該類中所需的方法所需的方法3. 創(chuàng)建事件監(jiān)聽者對(duì)象4. 為將會(huì)觸發(fā)事件的組件c注冊(cè)相應(yīng)的事件監(jiān)聽者對(duì)象: 事件源.addxxlistener(xxlistener代表某種事件監(jiān)聽者)。實(shí)際上addxxlistener中的參數(shù)是一個(gè)事件監(jiān)聽器對(duì)象事件監(jiān)聽器對(duì)象。5. 要?jiǎng)h除事件監(jiān)聽者可以使用語句:事件源.removexxlistener;sisejava語言程序設(shè)計(jì)實(shí)用教程public class buttonact extends frame .

溫馨提示

  • 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)論