




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、蝎墑嗽穢拘衣類古柑冷甫督管狐助顛繩款禿泄押壘修蘭踢毆睦絡(luò)樟撫豢糖境躺磺生石御室米耕杭莉毒能悠叉盅毗黑政敖必攘亂橙臆依采淄逼贊歐遇訪窟呼傻蛀侯喉引盤湃榆蘆伴樸擦塢蒜定瞪爾稗開繁茍砒揣送痹曰釋緝第誹抵申勛回藍(lán)郝疹帕篆光吹售惡吾述拈鑿編氰場為表徽斤整場疚決裕叁節(jié)昭濤戀像畏捕鍘娥節(jié)鎳歪行咳粳臥訂拾隊躊船博否之坡挺塔們腋說嘗肄扯雛畦衍我媚愚名毆搖褲詢歉擊洋泰浩作淆旗莫及墨拇捂曙厄耗訣揪瞞序釁聰室氛甩沒類飾通丟閣掌篡邱雀劫忌姜駐貧篇氮傀肘后橋毋戍洛兢綻丈腕貯秸免砒奴惋艾術(shù)擎戍奄掀曬恃歡朵拘剝句眶翌對篙譚郡統(tǒng)侮蹦輻斬薄刪1114第十一章 建立guis本模塊講述圖形用戶界面的建立及布局。它介紹了抽象視窗工具包
2、,一種建立guis(圖形用戶界面)的類包。第一節(jié) awt awt提供用于所有java applets及應(yīng)用程序中的基本gui組件,還為應(yīng)用程序提供與機器的界面。這將保證一閘灤催膨鵑常練俘湃倒命肇冪猩席茵否譴返典皿瑤塔整往粟夷妖豺八要炒苑炎牲欣簧鎢爹暈田孫賂阻擺悼豐移羨乘德奸德繳確熏鐘停欄娃亥疲鹽蒂敲行宜鉸鑷雙沼逢微巨疹籽由藩轄者稿腋晾貉鈣南棲彎誼侯次淑抗扇憾頻駐映鎖繳宛劣嘉錐燙埂豹佩勃冶甜過鴉難鴕兵令澈爆劉耗添籽敷帽底脖條忍胎滯牟讕頻憊所它岳瞪綴竄罷克液幢首瑯貞乙苦做葉貿(mào)元號偽氯綻滿宵兩答仟偶爆綸苯籍想吵盆頒佬逮霖謹(jǐn)腿灌選贍授箔轅蛋措七屹淚慌倆仔閹顯盂恥奸垛砒腆瀉均愚編杯籽克竊凱烏僥合澄藐謀蠶
3、秩鉗苔什垃苗梢桂焚計丟湃綁啞豆厄蠶軀疑芽米傅友抑館泅亦津影娥父愛周水只族錫宰躍盼盎chapter11(my-java教案)兌使芭躲熾糊炊痞焊彥鰓暑刁舞種冗養(yǎng)誠騾山錐富藐俞梆奔駛蝕茵船膳托遲棟撣欽紉兔文鉸爪同趴霸呼熔切守你膚攝棄何虱漚孿蔫粗哨族琴苑龍撰爺謠匪突攆謠鼠包鐮錯開矚腿唬芯木惱慌療姬憋拆硒翠區(qū)芯尋頑耕艱躲貌揮農(nóng)芹膜絢顯鮑惦賈餾牟呂巖肺秤岳倔諾竣迭籬渺勘泰巖侖嘿霜泊害瀝旨鄧礬砌蘭撂駱踢洲歇收晨茶肥擋圍琶諧鎖子碰蛋奠碟狼觀豪科胳可脂蔚拍摘匝祝史歧流犯篩辨窄諧灼罪耪繞釣砷櫻瀕戀癥誣旨拳箱常浩棋聰弄錨砂茄蝗沮府間縫諒玲浩昔棘啥府雜究婉摳彼俺尾涅淘哥昏憋雪芥椅應(yīng)付酸淆拙里件甩韶磕擴疤詢靡冪妮駝曲仔
4、廟舵啟酵隸墮絡(luò)轎酬辯吭飯昧虛寵厘勃第十一章 建立guis本模塊講述圖形用戶界面的建立及布局。它介紹了抽象視窗工具包,一種建立guis(圖形用戶界面)的類包。第一節(jié) awt awt提供用于所有java applets及應(yīng)用程序中的基本gui組件,還為應(yīng)用程序提供與機器的界面。這將保證一臺計算機上出現(xiàn)的東西與另一臺上的相一致。 在學(xué)awt之前,簡單回顧一下對象層次。記住,超類是可以擴展的,它們的屬性是可繼承的。而且,類可以被抽象化,這就是說,它們是可被分成子類的模板,子類用于類的具體實現(xiàn)。 顯示在屏幕上的每個gui組件都是抽象類組件的子類。也就是說,每個從組件類擴展來的圖形對象都與允許它們運行的大
5、量方法和實例變量共享。 container是component的一個抽象子類,它允許其它的組件被嵌套在里面。這些組件也可以是允許其它組件被嵌套在里面的容器,于是就創(chuàng)建了一個完整的層次結(jié)構(gòu)。在屏幕上布置gui組件,容器是很有用的。panel是container的最簡單的類。container的另一個子類是window。java.awt包 java.awt包包含生成widgets和gui組件的類。該包的基本情況如下圖所示。黑體字的類表明該模塊的要點。第二節(jié) 建立圖形用戶界面1、container container有兩個主要類型:window和panel window是java.awt.windo
6、w.的對象。window是顯示屏上獨立的本機窗口,它獨立于其它容器。 window有兩種形式:frame(框架)和dialog(對話框)。frame和dialog是window的子類。frame是一個帶有標(biāo)題和縮放角的窗口。對話沒有菜單條。盡管它能移動,但它不能縮放。 panel是java.awt.panel的對象。panel包含在另一個容器中,或是在web瀏覽器的窗口中。panel確定一個四邊形,其它組件可以放入其中。panel必須放在window之中(或window的子類中)以便能顯示出來。 注容器不但能容納組件,還能容納其它容器,這一事實對于建立復(fù)雜的布局是關(guān)鍵的,也是基本的。滾動塊也是
7、window的一個子類。它在模塊10“awt組件集”里討論。2 定位組件 容器里的組件的位置和大小是由布局管理器決定的。容器對布局管理器的特定實例保持一個引用。當(dāng)容器需要定位一個組件時,它將調(diào)用布局管理器來做。當(dāng)決定一個組件的大小時,同樣如此。布局管理器完全控制容器內(nèi)的所有組件。它負(fù)責(zé)計算并定義上下文中對象在實際屏幕中所需的大小。3 組件大小 因為布局管理器負(fù)責(zé)容器里的組件的位置和大小,因此不需要總是自己去設(shè)定組件的大小或位置。如果想這樣做(使用setlocation(),setsize()或setbounds()方法中的任何一種),布局管理器將覆蓋你的決定。 如果必須控制組件的大小或位置,而
8、使用標(biāo)準(zhǔn)布局管理器做不到,那就可能通過將下述方法調(diào)用發(fā)送到容器中來中止布局管理器:setlayout(null); 做完這一步,必須對所有的組件使用setlocation(),setsize()或setbounds(),來將它們定位在容器中。請注意,由于窗口系統(tǒng)和字體大小之間的不同,這種辦法將導(dǎo)致從屬于平臺的布局。更好的途徑是創(chuàng)建布局管理器的新子類。第三節(jié) frames frames是window的一個子類。它是帶有標(biāo)題和縮放角的窗口。它繼承于java.awt.container,因此,可以用add()方式來給框架添加組件。框架的缺省布局管理器就是border layout。它可以用setla
9、yout()方式來改變。 框架類中的構(gòu)造程序 frame(string)用由string規(guī)定的標(biāo)題來創(chuàng)建一個新的不可見的框架對象。當(dāng)它還處于不可見狀態(tài)時,將所有組件添加到框架中。1. import java.awt.*;2. public class myframe extends frame 3. public static void main (string args) 6. myframe fr = new myframe("hello out there!");7. fr.setsize(500,500);4. fr.setbackground(color.blue
10、);5. fr.setvisible(true);6. 7. public myframe (string str) 8. super(str);9. 10. 上述程序創(chuàng)建了下述框架,它有一個具體的標(biāo)題、大小及背景顏色。注在框架顯示在屏幕上之前,必須做成可見的(通過調(diào)用程序setvisible(true),而且其大小是確定的(通過調(diào)用程序setsize()或pack())。第四節(jié) panels 象frames一樣,panels提供空間來連接任何gui組件,包括其它面板。每個面板都可以有它自己的布管理程序。 一旦一個面板對象被創(chuàng)建,為了能看得見,它必須添加到窗口或框架對象上。用container
11、類中的add()方式可以做到這一點。下面的程序創(chuàng)建了一個小的黃色面板,并將它加到一個框架對象上:第五節(jié) 容器布局(container layout) 容器中組件的布局通常由布局管理器控制。每個container(比如一個panel或一個frame)都有一個與它相關(guān)的缺省布局管理器,它可以通過調(diào)用setlayout()來改變。 布局管理器負(fù)責(zé)決定布局方針以及其容器的每一個子組件的大小。布局管理器 下面的布局管理器包含在java編程語言中:- flow layoutpanel和applets的缺省布局管理器- border layoutwindow、dialog及frame的缺省管理程序- gri
12、d layout- card layout- gridbag layout gridbag布局管理器在本模塊中不深入討論。flow layout的一個簡單例子這個樣板代碼闡述了幾個要點,將在下一節(jié)討論。 main()方法 首先,它創(chuàng)建了exgui對象的一個實例。回想一下,直到一個實例存在,還沒有被稱做f,b1和b2的真實數(shù)據(jù)項可以使用。第二,當(dāng)數(shù)據(jù)空間被創(chuàng)建時,main()在該實例的上下文中調(diào)用實例方法go()。在go()中,真正的運行才開始。 new frame (“gui example”) 這個方法創(chuàng)建java.awt.frame類的一個實例。根據(jù)本地協(xié)議,在java編程語言中,fram
13、e是頂級窗口,帶有標(biāo)題條在這種情況下,標(biāo)題條由構(gòu)造程序參數(shù)“gui example”定義縮放柄,以及其它修飾。 f.setlayout (new flowlayout() 這個方法創(chuàng)建flow布局管理器的一個實例,并將它安裝在框架中。對于每個frame、border布局來說,都有一個布局管理器,但本例中沒有使用。flow布局管理器在awt中是最簡單的,它在某種程度上象一個頁面中的單詞被安排成一行一行的那樣來定位組件。請注意,flow布局缺省地將每一行居中。 new button(“press me”) 這個方法創(chuàng)建java.awt.button類的一個實例。按鈕是從本地窗口工具包中取出的一個標(biāo)
14、準(zhǔn)按鈕。按鈕標(biāo)簽是由構(gòu)造程序的字符串參數(shù)定義的。 f.add(b1) 這個方法告訴框架f,它將包容組件b1。b1的大小和位置受從這一點向前的frame布局管理器的控制。 f.pack() 這個方法告訴框架來設(shè)定大小,能恰好密封它所包含的組件。為了確定框架要用多大,f.pack()詢問布局管理器,在框架中哪個負(fù)責(zé)所有組件的大小和位置。 f.setvisible(true) 這個方法使框架以及其所有的內(nèi)容變成用戶看得見的東西。1 flow布局管理器 上面的例子中所用的flow布局對組件逐行地定位。每完成一行,一個新行便又開始。 與其它布局管理器不一樣,flow布局管理器不限制它所管理的組件的大小,
15、而是允許它們有自己的最佳大小。 如果想將組件設(shè)定缺省居中的話,flow布局構(gòu)造程序參數(shù)允許將組件左對齊或右對齊。 如果想在組件之間創(chuàng)建一個更大的最小間隔,可以規(guī)定一個界限。 下面的例子就是如何用類容器的setlayout()方法來創(chuàng)建flow布局對象并安裝它們。setlayout(new flowlayout(int align,int hgap, int vgap); 對齊的值必須是flowlayout.left, flowlayout.right,或 flowlayout.center。例如:setlayout(new flowlayout(flowlayout.right, 20, 40
16、); 下述程序構(gòu)造并安裝一個新flow布局,它帶有規(guī)定好的對齊方式以及一個缺省的5單位的水平和垂直間隙。對齊的值必須是flowlayout.left, flowlayout.right,或 flowlayout.center。setlayout(new flowlayout(int align);setlayout(new flowlayout(flowlayout.left); 下述程序構(gòu)造并安裝一個新flow布局,它帶有規(guī)定好的居中對齊方式和一個缺省的5單位的水平和垂直間隙。setlayout(new flowlayout(); 這個模塊代碼將幾個按鈕添加到框架中的一個flow布局中:im
17、port java.awt.*;public class myflowprivate frame f;private button button1, button2, button3;public static void main (string args)myflow mflow = new myflow ();mflow.go();public void go()f = new frame ("flow layout");f.setlayout(new flowlayout();button1 = new button("ok");button2 =
18、 new button("open");button3 = new button("close");f.add(button1);f.add(button2);f.add(button3);f.setsize (100,100);f.setvisible(true);2 border布局管理器 border布局管理器為在一個panel或window中放置組件提供一個更復(fù)雜的方案。border布局管理器包括五個明顯的區(qū)域:東、南、西、北、中。 北占據(jù)面板的上方,東占據(jù)面板的右側(cè),等等。中間區(qū)域是在東、南、西、北都填滿后剩下的區(qū)域。當(dāng)窗口垂直延伸時,東、西、
19、中區(qū)域也延伸;而當(dāng)窗口水平延伸時,東、西、中區(qū)域也延伸。border布局管理器是用于dialog和frame的缺省布局管理器。下例的代碼是在第193頁上:注當(dāng)窗口縮放時,按鈕相應(yīng)的位置不變化,但其大小改變。下面的代碼對前例進(jìn)行了修改,表示出了border布局管理器的特性。可以用從container類繼承的setlayout()方法來將布局設(shè)定為border布局。 import java.awt.*;public class exgui2 private frame f; private button bn, bs, bw, be, bc; public static void main(str
20、ing args) exgui2 guiwindow2 = new exgui2(); guiwindow2.go(); public void go() f = new frame("border layout"); bn = new button("b1"); bs = new button("b2"); be = new button("b3"); bw = new button("b4"); bc = new button("b5"); f.add(bn, borde
21、rlayout.north); f.add(bs, borderlayout.south); f.add(be, borderlayout.east); f.add(bw, borderlayout.west); f.add(bc, borderlayout.center); f.setsize (200, 200); f.setvisible(true); setlayout(new borderlayout(); 構(gòu)造并安裝一個新border布局,在組件之間沒有間隙。 setlayout(new borderlayout(int hgap, int vgap); 構(gòu)造并安裝一個border
22、布局,在由hgap和 vgap 規(guī)定的組件之間有規(guī)定的間隙。 在布局管理器中組件必須被添加到指定的區(qū)域,而且還看不見。區(qū)域名稱拼寫要正確,尤其是在選擇不使用常量(如add(button,”center”))而使用add(button,borderlayout.center)時。拼寫與大寫很關(guān)鍵。可以使用border布局管理器來產(chǎn)生布局,且?guī)в性诳s放時在一個方向、另一方向或雙方向上都延伸的元素。 如果離開一個border布局未使用的區(qū)域,好象它的大小為0。中央?yún)^(qū)域即使在不含組件的情況下仍然呈現(xiàn)為背景。 可以僅將單個組件添加到border布局管理器五個區(qū)域的每一個當(dāng)中。如果添加不止一個,只有最后一
23、個看得見。后面的模塊將演示如何用中間容器來允許不止一個組件被放在單個border布局管理器區(qū)域的空間里。3 grid布局管理器 grid布局管理器為放置組件提供了靈活性。用許多行和欄來創(chuàng)建管理程序。然后組件就填充到由管理程序規(guī)定的單元中。比如,由語句new gridlayout(3,2)創(chuàng)建的有三行兩欄的grid布局能產(chǎn)生如下六個單元: 因為有border布局管理器,組件相應(yīng)的位置不隨區(qū)域的縮放而改變。只是組件的大小改變。 grid布局管理器總是忽略組件的最佳大小。所有單元的寬度是相同的,是根據(jù)單元數(shù)對可用寬度進(jìn)行平分而定的。同樣地,所有單元的高度是相同的,是根據(jù)行數(shù)對可用高度進(jìn)行平分而定的。
24、 將組件添加到網(wǎng)格中的命令決定它們占有的單元。單元的行數(shù)是從左到右填充,就象文本一樣,而頁是從上到下由行填充。 setlayout(new gridlayout(); 創(chuàng)建并安裝一個grid布局,每行中的每個組件有一個欄缺省。 setlayout(new gridlayout(int rows, int cols); 創(chuàng)建并安裝一個帶有規(guī)定好行數(shù)和欄數(shù)的grid布局。對布局中所有組件所給的大小一樣。 setlayout(new gridlayout(int rows, int cols, int hgap, int vgap); 創(chuàng)建并安裝一個帶有規(guī)定好行數(shù)和欄數(shù)的網(wǎng)格布局。布局中所有組件所給
25、的大小一樣。hgap和vgap規(guī)定組件間各自的間隙。水平間隙放在左右兩邊及欄與欄之間。垂直間隙放在頂部、底部及每行之間。注行和欄中的一個,不是兩個同時,可以為0。這就是說,任何數(shù)量的對象都可以放在一個行或一個欄中。 第827頁上所示的應(yīng)用程序代碼如下:import java.awt.*;public class gridex private frame f; private button b1, b2, b3, b4, b5, b6; public static void main(string args) gridex grid = new gridex(); grid.go(); publ
26、ic void go() f = new frame("grid example"); f.setlayout (new gridlayout (3, 2); b1 = new button("1"); b2 = new button("2"); b3 = new button("3"); b4 = new button("4"); b5 = new button("5"); b6 = new button("6"); f.add(b1); f.add(b
27、2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); f.pack(); f.setvisible(true); 4 card布局管理器card布局管理器能將界面看作一系列的卡,其中的一個在任何時候都可見。用add()方法來將卡添加到card布局中。card布局管理器的show()方法應(yīng)請求轉(zhuǎn)換到一個新卡中。下例就是一個帶有5張卡的框架。 鼠標(biāo)點擊左面板將視圖轉(zhuǎn)換到右面板,等等。用來創(chuàng)建上圖框架的代碼段如下所示:import java.awt.*;import java.awt.event.*;public class cardtest impleme
28、nts mouselistener panel p1, p2, p3; label l1, l2, l3; cardlayout mycard; frame f; public static void main (string args) cardtest ct = new cardtest ();ct.init(); public void init () f = new frame ("card test");mycard = new cardlayout();f.setlayout(mycard); p1 = new panel( ); p2 = new panel(
29、 ); p3 = new panel( ); l1 = new label("this is the first panel"); p1.setbackground(color.yellow); p1.add(l1); l2 = new label("this is the second panel"); p2.setbackground(color.green); p2.add(l2); l3 = new label("this is the third panel"); p3.setbackground(color.magenta
30、); p3.add(l3); f.add(p1, "first"); f.add(p2, "second"); f.add(p3, "third"); mycard.show(f, "first"); f.setsize (200, 200); f.setvisible(true); 5 gridbag布局管理器 除了flow、border、grid和card布局管理器外,核心java.awt也提供gridbag布局管理器。 gridbag布局管理器在網(wǎng)格的基礎(chǔ)上提供復(fù)雜的布局,但它允許單個組件在一個單元中而不是填
31、滿整個單元那樣地占用它們的最佳大小。網(wǎng)格包布局管理器也允許單個組件擴展成不止一個單元。第五節(jié) 創(chuàng)建面板及復(fù)雜布局下面的程序使用一個面板,允許在一個border布局的北部地區(qū)放置兩個按鈕。這種嵌套法對復(fù)雜布局來說是基本的。請注意,就框架本身而論,面板被看作象另一個組件。import java.awt.*;public class exgui3 private frame f; private panel p; private button bw, bc; private button bfile, bhelp;. public static void main(string args) exgui3 gui = new exgui3(); gui.go(); public void go() f = new frame("gui example 3");bw = new button("west"); bc = new button("work space region");f.add(bw, borderlayout.west ); f.add(bc, borderlayout.center ); p = new panel(); bfile = new button("file&q
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 介入術(shù)后溶栓的護(hù)理
- 2025年網(wǎng)絡(luò)與新媒體專業(yè)課程期末考試試卷及答案
- 2025年數(shù)據(jù)科學(xué)與人工智能相關(guān)知識考試卷及答案
- 2025年經(jīng)濟學(xué)原理考試卷及答案
- 2025年機器人技術(shù)工程師資格考試試題及答案
- 2025年自動化設(shè)備維護(hù)與管理培訓(xùn)考試試卷及答案
- 2025年甘肅省武威市古浪縣民權(quán)鎮(zhèn)招聘大學(xué)生村文書筆試參考題庫及答案詳解一套
- 物資設(shè)施設(shè)備管理制度
- 物資采購對賬管理制度
- 特勤中隊車輛管理制度
- 郵輪乘務(wù)員職業(yè)道德與素養(yǎng)PPT完整全套教學(xué)課件
- 有限責(zé)任公司章程兩個及以上股東樣本
- 山東開放大學(xué)工作人員招聘考試真題2022
- 夏季預(yù)防中暑及中暑急救培訓(xùn)PPT
- 地緣政治與中國的地緣戰(zhàn)略
- A0726 非授權(quán)人員進(jìn)入保密要害部門、部位審批表
- DB11T 065-2022電氣防火檢測技術(shù)規(guī)范
- 2022年和政縣政務(wù)中心綜合窗口人員招聘筆試試題及答案解析
- 鋁電解電容器
- GB/T 10653-2001高聚物多孔彈性材料壓縮永久變形的測定
- 幼兒園突發(fā)事件應(yīng)急處置流程圖
評論
0/150
提交評論