必威电竞|足球世界杯竞猜平台

AWT
來源:互聯(lián)網

AWT(Abstract Window Toolkit),中文譯為抽象窗口工具包,該包提供了一套與本地圖形界面進行交互的接口,是Java提供的用來建立和設置Java的圖形用戶界面的基本工具。AWT中的圖形函數與操作系統(tǒng)所提供的圖形函數之間有著一一對應的關系,稱之為peers,當利用AWT編寫圖形用戶界面時,實際上是在利用本地操作系統(tǒng)所提供的圖形庫。由于不同 操作系統(tǒng)的圖形庫所提供的樣式和功能是不一樣的,在一個平臺上存在的功能在另一個平臺上則可能不存在。為了實現(xiàn)Java語言所宣稱的“一次編寫,到處運行(write once, run anywhere)”的概念,AWT不得不通過犧牲功能來實現(xiàn)平臺無關性,也即AWT所提供的圖形功能是各種操作系統(tǒng)所提供的圖形功能的交集。

術語名稱

抽象窗口工具箱(AWT)

術語解釋

抽象窗口工具包(Abstract Windowing Toolkit) (AWT)是Java的平臺獨立的窗口系統(tǒng),圖形和用戶界面器件工具包。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)有著很大的區(qū)別,新的AWT克服了舊AWT的很多缺點,在設計上有較大改進,使用也更方便,這里主要介紹新的AWT, 但在Java1.1及以后版本中舊的AWT的程序也可運行。

Abstract Window Toolkit(AWT)是一個圖形過程庫,使用Java語言通過位圖顯示來操縱窗口。最后設計者又將AWT擴充為Alternative Window工具箱和Applet Widget工具箱。最新的GUI接口稱為Swing,擴展了AWT,程序開發(fā)人員可以利用Swing生成獨立于平臺的GUI對象。

區(qū)別

抽象窗口工具包AWT (AbstractWindow Toolkit) 是 API為Java 程序提供的建立圖形用戶界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持圖形用戶界面編程的功能包括:用戶界面組件;事件處理模型;圖形和圖像工具,包括形狀、顏色和字體類;布局管理器,可以進行靈活的窗口布局而與特定窗口的尺寸和屏幕分辨率無關;數據傳送類,可以通過本地平臺的剪貼板來進行剪切和粘貼。

優(yōu)勢

Java釋出的時候,AWT作為Java最弱的組件受到不小的批評。最根本的缺點是AWT在原生的用戶界面之上僅提供了一個非常薄的抽象層。例如,生成一個AWT的復選框會導致AWT直接調用下層原生例程來生成一個復選框。不幸的是,一個Windows平臺上的復選框同Mac OS平臺或者各種UNIX風格平臺上的復選框并不是那么相同。這種糟糕的設計選擇使得那些擁護Java“一次編寫,到處運行(write once, run anywhere)”信條的程序員們過得并不舒暢,因為AWT并不能保證他們的應用在各種平臺上表現(xiàn)得有多相似。一個AWT應用可能在Windows上表現(xiàn)很好可是到了麥金塔上幾乎不能使用,或者正好相反。在90年代,程序員中流傳著一個笑話:Java的真正信條是“一次編寫,到處測試(write once, test everywhere)”。導致這種糟糕局面的一個可能原因據說是AWT從概念產生到完成實現(xiàn)只用了一個月。

在第二版的Java開發(fā)包中,AWT的器件很大程度上被Swing工具包替代。Swing通過自己繪制器件而避免了AWT的種種弊端:Swing調用本地圖形子系統(tǒng)中的底層例程,而不是依賴操作系統(tǒng)的高層用戶界面模塊。

層次結構

層次

在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標識了一個矩形區(qū)域,該區(qū)域允許其他組件放入。Panel必須放在Window或其子類中才能顯示。

使用方法

java.awt包提供了基本的java程序的GUI設計工具。主要包括下述三個概念:

組件--Component

容器--Container

布局管理器--LayoutManager

組件

組件(Conponent)是圖形用戶界面最基本的部分,也稱為構件,是可以以圖形化的方式顯示在屏幕上,并能與用戶進行交互的對象,例如一個按鈕,一個標簽等。組件不能獨立地顯示出來,必須將其放在一定的容器中才可以顯示。類java.awt.Component是許多組件類的父類,Component類中封裝了組件通用的方法和屬性,如圖形的組件對象、大小、顯示位置、前景色和背景色、邊界、可見性等。

AWT常用組件

容器

容器(Container)也是一個類,實際上是Component的子類,因此容器本身也是一個組件,具有組件的所有性質,但是它的主要功能是容納其它組件和容器。容器可以簡化圖形化界面的設計,以整體結構來布置界面。所有的容器都可以通過add()方法向容器中添加組件。常用的容器3種:Panel, Frame, Applet。

1.框架(Frame)

構造方法:

要生成一個窗口,通常使用Window的子類Frame類進行實例化,而不是直接使用Window 類,框架的外觀就像平常Windows系統(tǒng)下的窗口,有標題、邊框、菜單和大小等。setSize()方法可以設置框架尺寸的大小,setVisibe()方法可以設置窗口的可見性。

2.面板(Panel)

構造方法:

面板是一種透明的容器,沒有標題和邊框。與Frame 不同,Panel不能作為最外層的容器單獨存在,它首先必須作為一個組件放置在其他容器(一般為Frame)中,然后把組件添加到它里面。在java.swing中則是JPanel。

3.小程序(Applet)

構造方法:

框架一般用作Java應用程序的窗口,而Applet是Java小程序的窗口。與Frame不同,Applet是在網頁中顯示的,也可以通過添加Panel進行組件布局。

布局管理器

布局管理器(LayoutManager):每個容器都有一個布局管理器,當容器需要對某個組件進行定位或判斷其大小、尺寸時,就會調用其對應的布局管理器。使用布局管理器可以實現(xiàn)跨平臺的特性,并且獲得動態(tài)的布局效果。布局管理器負責管理組件的排列順序、大小和位置。不同的布局管理器使用不同的布局策略,容器可以通過選擇不同的布局管理器來決定如何布局。

流布局管理器(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個區(qū)域,每個區(qū)域只能放置一個組件。在使用add()方法添加組件到容器時,必須指定將其放置在哪個區(qū)域中。使用BorderLayout時,如果容器大小發(fā)生變換,組件的相對位置不變。

網格布局管理器(GridLayout)

構造方法:

GridLayout 可使容器中的各個組件呈網格狀布局,平局占據容器的空間,即使容器的大小發(fā)生變化,每個組件還是平均占據容器的空間。和FlowLayout一樣,GridLayout也是按照從上到下,從左到右的規(guī)律進行排列的。

卡片布局管理器(CardLayout)

構造方法:

CardLayout能夠幫助用戶處理兩個乃至跟多的成員共享同一顯示空間。它把容器分成許多層,每層的顯示空間占據整個容器的大小,并且每層之允許反之一個組件,可以通過Panel來實現(xiàn)每層復雜的用戶界面。

實例

使用Frame的例子:

以下是一個FlowLayout示例小程序代碼:

結果為:

參考資料 >

生活家百科家居網