《疯狂Java讲义》11
1.?Java?使用AWT和Swing類完成圖形用戶界面編程。其中AWT的全稱是抽象窗口工具集(Abstract Window Toolkit)。它是最早提供的GUI庫(kù),這個(gè)GUI庫(kù)提供了一些基本的功能,但是很有局限性,所以后來(lái)又提供了Swing庫(kù)。
?
?2.?? 所有和AWT編程相關(guān)的類都放在java.awt包以及它的子包中,AWT編程中有兩個(gè)基類:Component和MuneComponent。Component代表一個(gè)能以圖形化方式顯示出來(lái),并可與用戶交互的對(duì)象。例如Button代表一個(gè)按鈕。而MenuComponent顧名思義代表圖形界面的菜單組件,包括MenuBar
(菜單條)、MenuItem(菜單項(xiàng))等子類。
?
3. ?在AWT圖形用戶界面編程里還有兩個(gè)重要的概念:Container和LayoutManager,其中Container是一種特殊的Compotent,它代表一種容器,可以盛裝普通的Compotent,而LayoutManager則是容器管理其它組件布局的方式。
?
4.?容器是Component的子類,因此容器對(duì)象本身也是一個(gè)組件,具有組件的所有性質(zhì),可以調(diào)用Component類的所有方法。Component類提供了如下幾個(gè)常用方法來(lái)設(shè)置組建的大小、位置和可見性等。
(1)setLocation(int x,int y):設(shè)置組建的位置;
(2)setSize(int width,int height ):設(shè)置組件的大小;
(3)setBounds(int x,int y,int width,int height):同時(shí)設(shè)置組件的位置、大小;
(4)setVisible(Boolean b):設(shè)置該組件的可見性;
?
5.?AWT主要提供了如下兩種主要的容器類型:
(1)Window:可獨(dú)立存在的頂級(jí)窗口;
(2)Panel:可作為容器容納其他組件,但不能獨(dú)立存在,必須被添加到其他容器中(如Window、Panel或者Applet等);
?
6. ?AWT容器的繼承關(guān)系圖如下所示:
?
常用的組件是Panel、ScrollPane、Frame和Dialog。
Frame的特點(diǎn)是:
1)Frame對(duì)象有標(biāo)題,允許通過拖拉來(lái)改變窗口的位置和大小;
2)初始化時(shí)為不可見,可用setVisible(true)使其顯示出來(lái);
3)默認(rèn)使用BorderLayout作為其布局管理器。
舉個(gè)例子:
?
如果讀者嘗試過這個(gè)程序,就會(huì)發(fā)現(xiàn)這個(gè)小窗口點(diǎn)擊叉叉是關(guān)不掉的,這是因?yàn)檫€沒有為該窗口編寫任何事件響應(yīng),如果想關(guān)閉該窗口,可以通過關(guān)閉運(yùn)行程序的命令行窗口來(lái)關(guān)閉該窗口。
?
7. ?Panel是AWT中另一個(gè)典型的容器,它代表不能獨(dú)立存在、必須放在其他容器中。Panel外在表現(xiàn)為一個(gè)矩形區(qū)域,該區(qū)域內(nèi)可以盛裝其他組件。Panel存在的意義就是為其他組件提供空間。
Panel容器具有以下幾個(gè)特點(diǎn):
(1)可作為容器盛裝其他組件,為放置組件提供空間;
(2)不能單獨(dú)存在,必須放到其他容器中;
(3)默認(rèn)使用FlowLayout為布局管理器。
舉個(gè)栗子:
?
?
8.?ScrollPane是一個(gè)帶滾動(dòng)條的容器,它也不能獨(dú)立存在,特點(diǎn)是:
(1)可作為容器來(lái)盛裝其他組件,當(dāng)組件占用空間過大時(shí),自動(dòng)產(chǎn)生滾動(dòng)條,也可以通過指定特定的構(gòu)造器參數(shù)來(lái)指定默認(rèn)具有滾動(dòng)條。
(2)不能單獨(dú)存在,必須放到其他容器中;
(3)默認(rèn)使用BorderLayout作為其布局管理器。通常不允許改變ScrollPane的布局管理器。
舉個(gè)栗子:
看到結(jié)果我們感覺有點(diǎn)奇怪,代碼中設(shè)置的文本框沒有顯現(xiàn)出來(lái),為什么呢?
這是因?yàn)镾crollPane使用BorderLayout布局管理器的緣故,它導(dǎo)致容器中只有一個(gè)被顯現(xiàn)出來(lái)。具體情況我們后面介紹。
?
9.?布局管理器
????為什么使用布局管理器?實(shí)現(xiàn)平臺(tái)的遷移性,就是說“ Write Once,Run Anywhere”。避免因?yàn)槠脚_(tái)的不同導(dǎo)致布局惡心。Java提供了LayoutManager、LayoutManager可以根據(jù)運(yùn)行平臺(tái)調(diào)整組建的大小,程序員要做的就是為容器選擇合適的布局管理器。
????AWT提供了FlowLayout、BorderLayout、GridLayout、GridBagLayout、CardLayout 5個(gè)常用的布局管理器,Swing還提供了一個(gè)BoxLayout布局管理器。
(1)FlowLayout布局管理器:
????FlowLayout布局管理器從左到右排列所有組件,遇到邊界就折回下一行重新開始。我們?nèi)粘]斎胛恼聲r(shí)用的就是FlowLayout布局管理器。
????FlowLayout有三個(gè)構(gòu)造器:
????1)FlowLayout():使用默認(rèn)的對(duì)齊方式及默認(rèn)的垂直間距、水平間距創(chuàng)建FlowLayout布局管理器;
????2)FlowLayout(int align):使用指定的對(duì)齊方式及默認(rèn)的垂直間距、水平間距創(chuàng)建;
????3)FlowLayout(int align,int hgap,int vgap):使用指定的對(duì)齊方式及指定的垂直間距、水平間距創(chuàng)建。
ps:align表示的是組件的排列方向:FlowLayout.LEFT(從左到右)、FlowLayout.RIGHT(從右到左)、FlowLayout.CENTER(從中間向兩邊)。
舉個(gè)例子:
?
這個(gè)例子舉得不好,沒有想表達(dá)我的意思。設(shè)置的排列方式是從中間到四周(CENTER)形式。但是上面的栗子沒看出來(lái),因?yàn)橛衟ack()方法,這個(gè)是設(shè)置窗口為最佳大小,所以看不出來(lái),我注釋了以后就變了
這個(gè)就看的比較明顯了。
(2)BorderLayout布局管理器
????BorderLayout將容器分為EAST、SOUTH、WEST、NORTH、CERTER 5個(gè)區(qū)域。如圖所示:
????當(dāng)改變使用BorderLayout的容器大小時(shí),NORTH、SOUTH、CENTER區(qū)域水平調(diào)整,而EAST、WEST、CERTER垂直調(diào)整。
????使用BorderLayout有如下兩個(gè)注意點(diǎn):
????1)添加組件時(shí),需要指定到添加到哪個(gè)區(qū)域中,否則默認(rèn)添加到中間區(qū)域中。
????2)如果向同一個(gè)區(qū)域中添加多個(gè)組件時(shí),后放入的組件會(huì)覆蓋先放入的組件。
????這個(gè)就解釋了為什么上面的一個(gè)例子:ScrollPane栗子里沒有顯示文本框,因?yàn)楸桓采w了。
?
????Frame、Dialog、ScrollPane默認(rèn)使用BorderLayout布局管理器,BorderLayout有兩個(gè)構(gòu)造器:
????1)BorderLayout():使用默認(rèn)的水平間距和垂直間距;
????2)BorderLayout(int hgap,int vgap):使用指定的水平間距和垂直間距。
舉個(gè)栗子:
但是很遺憾,我沒有得到想象中的結(jié)果,今天時(shí)間有點(diǎn)不夠了,下次再研究。5個(gè)布局管理器只說了兩個(gè),繼續(xù)加油吧!
????
?
總結(jié)
以上是生活随笔為你收集整理的《疯狂Java讲义》11的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《疯狂Java讲义》10
- 下一篇: 安卓第二趴