術語名稱
抽象視窗工具箱(AWT)
術語解釋
抽象視窗工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台獨立的視窗系統,圖形和用戶界面器件工具包。AWT是Java基礎類 (JFC)的一部分,為Java程式提供圖形用戶界面(GUI)的標準API。
AWT提供了JavaApplet和Java Application中可用的用戶圖形界面GUI中的基本組件(components)。由於Java是一種獨立於平台的程式設計語言,但GUI卻往往是依賴於特定平台的,Java採用了相應的技術使得AWT能提供給應用程式獨立於機器平台的接口,這保證了同一程式的GUI在不同機器上運行具有類似的外觀(不一定完全一致)。
Java1.0的AWT(舊AWT)和Java1.1以後的AWT(新AWT)有著很大的區別,新的AWT克服了舊AWT的很多缺點,在設計上有較大改進,使用也更方便,這裡主要介紹新的AWT, 但在Java1.1及以後版本中舊的AWT的程式也可運行。
Abstract Window Toolkit(AWT)是一個圖形過程庫,使用Java語言通過點陣圖顯示來操縱視窗。最後設計者又將AWT擴充為Alternative Window工具箱和Applet Widget工具箱。最新的GUI接口稱為Swing,擴展了AWT,程式開發人員可以利用Swing生成獨立於平台的GUI對象。
區別
抽象視窗工具包AWT (AbstractWindow Toolkit) 是 API為Java 程式提供的建立圖形用戶界面GUI (Graphics User Interface)工具集,AWT可用於Java的applet和applications中。它支持圖形用戶界面編程的功能包括: 用戶界面組件;事件處理模型;圖形和圖像工具,包括形狀、顏色和字型類;布局管理器,可以進行靈活的視窗布局而與特定視窗的尺寸和螢幕解析度無關;數據傳送類,可以通過本地平台的剪貼簿來進行剪下和貼上。
優勢
Java釋出的時候,AWT作為Java最弱的組件受到不小的批評。最根本的缺點是AWT在原生的用戶界面之上僅提供了一個非常薄的抽象層。例如,生成一個AWT的複選框會導致AWT直接調用下層原生例程來生成一個複選框。不幸的是,一個Windows平台上的複選框同MacOS平台或者各種UNIX風格平台上的複選框並不是那么相同。這種糟糕的設計選擇使得那些擁護Java“一次編寫,到處運行 (write once, run anywhere)”信條的程式設計師們過得並不舒暢,因為AWT並不能保證他們的套用在各種平台上表現得有多相似。一個AWT套用可能在Windows上表現很好可是到了Macintosh上幾乎不能使用,或者正好相反。在90年代,程式設計師中流傳著一個笑話:Java的真正信條是“一次編寫,到處測試 (write once, test everywhere)”。導致這種糟糕局面的一個可能原因據說是AWT從概念產生到完成實現只用了一個月。
在第二版的Java開發包中,AWT的器件很大程度上被Swing工具包替代。Swing通過自己繪製器件而避免了AWT的種種弊端:Swing調用本地圖形子系統中的底層例程,而不是依賴作業系統的高層用戶界面模組。
層次結構
層次
在AWT中,所有能在螢幕上顯示的組件(component)對應的類,均是抽象類Component的子類或子孫類。這些類均可繼承Component類的變數和方法。 Container類是Component的子類,它也是一個抽象類,它允許其他的組件(Component)加入其中。加入的Component也允許是Container類型,即允許多層嵌套的層次結構,Container類在將組件以合適的形式安排在螢幕上時很有用,它有兩個子類,Panel和Window,它們不是抽象類。
獨立
Window對應的類為java.awt.Windows, 它可獨立於其他Container而存在,它有兩個子類, Frame和Dialog, Frame是具有標題(title)和可伸縮的角(resize corner)的視窗(Window)。Dialog則沒有選單條,雖然它能移動,但不能伸縮。
滾動面板(ScrollPane)也是Window類的子類,這裡就不討論了。
Panel對應的類為java.awt.Panel,它可包含其他Container類型的組件,或包含在瀏覽器視窗中。Panel標識了一個矩形區域,該區域允許其他組件放入。Panel必須放在Window或其子類中才能顯示。
使用方法
java.awt包提供了基本的java程式的GUI設計工具。主要包括下述三個概念:
•組件--Component
•容器--Container
•布局管理器--LayoutManager
組件
組件(Conponent)是圖形用戶界面最基本的部分,也稱為構件,是可以以圖形化的方式顯示在螢幕上,並能與用戶進行互動的對象,例如一個按鈕,一個標籤等。組件不能獨立地顯示出來,必須將其放在一定的容器中才可以顯示。 類java.awt.Component是許多組件類的父類,Component類中封裝了組件通用的方法和屬性,如圖形的組件對象、大小、顯示位置、前景色和背景色、邊界、可見性等。
•AWT常用組件
組件名稱 | 構造方法 | 使用說明 |
按鈕(Button) | Button b=new Button("退出"); | 單擊按鈕產生ActionEvent事件,實現ActionListener接口並重寫actionPerformed()方法監聽和處理事件 |
複選框(Checkbox) | Checkbox ch=new Checkbox("one",true); | 選中複選框產生ItemAction事件,實現ItemListener接口監聽和處理事件 |
下拉選單(Choice) | Choice colorChoose=new Choice(); | 實現ItemListener接口監聽和處理事件;Add()方法可在下拉列表中添加選項 |
畫布(Canvas) | public Canvas(GraphicsConfigurationconfig); | 重寫Canvas類的paint()方法實現完成圖形處理;實現MouseListener和KeyListener接口監聽Canvas組件的滑鼠和鍵盤事件 |
文本框(TextField) | TextField ft=new TextField(16); //寬度為16個字元 | 文本框只能顯示一行,按Enter鍵時產生ActionEvent事件,通過ActionListener接口中的actionPerformed()方法處理事件 |
文本域(TextAera) | TextArea ta=new TextArea("Textarea",4,10); //4行10列 | 可顯示多行多列文本和滾動條 |
列表框(List) | List list=new List(4,false); //4行,不允許多選 | 提供多個文本選項,支持滾動條,可以瀏覽多項 |
對話框(Dialog) | Window類的子類 | |
檔案對話框(FileDialog) | Filedialog fd=new Filedialog(frm,"fileddilog"); | 當用戶想打開或存儲檔案時,可使用檔案對話框進行操作 |
選單欄(MenuBar) | MenuBar mb=new MenuBar(); | 通過frm.setMenuBar(mb)語句可將選單mb設定為Frame對象frm的主選單 |
下拉選單(Menu) | Menu m=new Menu("Menu"); | 通過mb.add(m)可將m下拉列表添加到選單欄中 |
選單項(MenuItem) | MenuItem mi=new MenuItem("Openit"); | 通過mi.add(mi)將選單項mi添加到下一個下拉列表m中。 |
顏色(Color) | //非構造方法,兩種方法設定組件背景色 setBackground(Color.BLUE); setBackground(newColor(100,100,100)); | 通過setForeground()方法設定組件前景色,通過setBackground()方法設定組件背景色。顏色值可使用Color類的顏色常量來設定,也可通過指定RGB顏色對象值設定 |
字型(Font) | Font font=new Font("宋體",Font.BOLD,10); //宋體,10號,加粗 | 按順序向Font()構造方法傳遞有關字型設定的參數 |
容器
容器(Container)也是一個類,實際上是Component的子類,因此容器本身也是一個組件,具有組件的所有性質,但是它的主要功能是容納其它組件和容器。容器可以簡化圖形化界面的設計,以整體結構來布置界面。所有的容器都可以通過add()方法向容器中添加組件。常用的容器3種:Panel, Frame, Applet。
框架(Frame)
1.框架(Frame)
構造方法:
要生成一個視窗,通常使用Window的子類Frame類進行實例化,而不是直接使用Window 類,框架的外觀就像平常Windows系統下的視窗,有標題、框線、選單和大小等。setSize()方法可以設定框架尺寸的大小,setVisibe()方法可以設定視窗的可見性。
面板(Panel)
1.面板(Panel)
構造方法:
面板是一種透明的容器,沒有標題和框線。與Frame 不同,Panel不能作為最外層的容器單獨存在,它首先必須作為一個組件放置在其他容器(一般為Frame)中,然後把組件添加到它裡面。在java.swing中則是JPanel。
小程式(Applet)
1.小程式(Applet)
構造方法:
框架一般用作Java應用程式的視窗,而Applet是Java小程式的視窗。與Frame不同,Applet是在網頁中顯示的,也可以通過添加Panel進行組件布局。
布局管理器
布局管理器(LayoutManager):每個容器都有一個布局管理器,當容器需要對某個組件進行定位或判斷其大小、尺寸時,就會調用其對應的布局管理器。使用布局管理器可以實現跨平台的特性,並且獲得動態的布局效果。布局管理器負責管理組件的排列順序、大小和位置。不同的布局管理器使用不同的布局策略,容器可以通過選擇不同的布局管理器來決定如何布局。
流布局管理器( FlowLayout )
FlowLayout是Panel 和 Applet 的默認布局管理器。在該布局管理器中,組件在容器中按照從上到下,從左到右的順序進行排列,行滿後則換行。
構造方法較多,例如:
FlowLayout();
默認構造方法,設定居中對齊方式,橫向和縱向間隔均為默認5像素
FlowLayout(FlowLayout.LEFT);
設定居左對齊,橫向和縱向間隔均為默認5像素
FlowLayout(FlowLayout.RIGHT,20,40);
設定居右對齊,橫向間隔20像素,縱向間隔40像
邊 界布局管理器( BorderLayout )
構造方法:
BorderLayout是Window、Frame和Dialog的默認布局管理器,其將容器分成North、South、East、West和Center 5個區域,每個區域只能放置一個組件。在使用add()方法添加組件到容器時,必須指定將其放置在哪個區域中。使用BorderLayout時,如果容器大小發生變換,組件的相對位置不變。
格線布局管理器( GridLayout )
構造方法:
GridLayout 可使容器中的各個組件呈格線狀布局,平局占據容器的空間,即使容器的大小發生變化,每個組件還是平均占據容器的空間。和FlowLayout一樣,GridLayout也是按照從上到下,從左到右的規律進行排列的。
卡片布局管理器(CardLayout)
構造方法:
CardLayout能夠幫助用戶處理兩個乃至跟多的成員共享同一顯示空間。它把容器分成許多層,每層的顯示空間占據整個容器的大小,並且每層之允許反之一個組件,可以通過Panel來實現每層複雜的用戶界面。
實例
使用Frame的例子:
以下是一個FlowLayout示例小程式 代碼:
結果為: