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