AWT

AWT

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

基本介紹

  • 中文名:抽象視窗工具包
  • 外文名:Abstract Window Toolkit
  • 縮寫:AWT
  • 程式語言:Java
  • 功能:圖形用戶界面(GUI)工具包
術語名稱,術語解釋,區別,優勢,層次結構,層次,獨立,使用方法,組件,容器,布局管理器,實例,

術語名稱

抽象視窗工具箱(AWT)

術語解釋

抽象視窗工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台獨立的視窗系統,圖形和用戶界面器件工具包。AWT是Java基礎類 (JFC)的一部分,為Java程式提供圖形用戶界面(GUI)的標準API。
AWT工具AWT工具
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從概念產生到完成實現只用了一個月。
AWTAWT
在第二版的Java開發包中,AWT的器件很大程度上被Swing工具包替代。Swing通過自己繪製器件而避免了AWT的種種弊端:Swing調用本地圖形子系統中的底層例程,而不是依賴作業系統的高層用戶界面模組。

層次結構

層次

在AWT中,所有能在螢幕上顯示的組件(component)對應的類,均是抽象類Component的子類或子孫類。這些類均可繼承Component類的變數和方法。 Container類是Component的子類,它也是一個抽象類,它允許其他的組件(Component)加入其中。加入的Component也允許是Container類型,即允許多層嵌套的層次結構,Container類在將組件以合適的形式安排在螢幕上時很有用,它有兩個子類,Panel和Window,它們不是抽象類。
Java.awt包的層次結構Java.awt包的層次結構

獨立

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。
  1. 框架(Frame)
Frame frm = new Frame("New Window");
要生成一個視窗,通常使用Window的子類Frame類進行實例化,而不是直接使用Window 類,框架的外觀就像平常Windows系統下的視窗,有標題、框線選單和大小等。setSize()方法可以設定框架尺寸的大小,setVisibe()方法可以設定視窗的可見性。
  1. 面板(Panel)
構造方法:
Panel pnl = new Panel();
面板是一種透明的容器,沒有標題和框線。與Frame 不同,Panel不能作為最外層的容器單獨存在,它首先必須作為一個組件放置在其他容器(一般為Frame)中,然後把組件添加到它裡面。在java.swing中則是JPanel
  1. 小程式(Applet)
構造方法:
Applet apt = new 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 bl = new BorderLayout();
BorderLayout是Window、Frame和Dialog的默認布局管理器,其將容器分成North、South、East、West和Center 5個區域,每個區域只能放置一個組件。在使用add()方法添加組件到容器時,必須指定將其放置在哪個區域中。使用BorderLayout時,如果容器大小發生變換,組件的相對位置不變。
格線布局管理器(GridLayout)
構造方法:
GridLayout gl = new GridLayout(3,5); //3行5列
GridLayout 可使容器中的各個組件呈格線狀布局,平局占據容器的空間,即使容器的大小發生變化,每個組件還是平均占據容器的空間。和FlowLayout一樣,GridLayout也是按照從上到下,從左到右的規律進行排列的。
卡片布局管理器(CardLayout)
構造方法:
CardLayout cl = new CardLayout();
CardLayout能夠幫助用戶處理兩個乃至跟多的成員共享同一顯示空間。它把容器分成許多層,每層的顯示空間占據整個容器的大小,並且每層之允許反之一個組件,可以通過Panel來實現每層複雜的用戶界面。

實例

使用Frame的例子:
import java.awt.*;public class MyFrame extends Frame{public static void main(String args[ ]){MyFrame fr = new MyFrame("Hello Out There!");//構造方法fr.setSize(200,200);//設定Frame的大小,預設為(0,0)fr.setBackground(Color.red);//設定Frame的背景,預設為紅色fr.setVisible(true);//設定Frame為可見,預設為不可見}public MyFrame (String str){super(str); //調用父類的構造方法}}
以下是一個FlowLayout示例小程式代碼: 
package org.gan.awt;import java.awt.Button;import java.awt.Frame;import java.awt.Panel;public class FlowLayoutManager {public static void main(String[] args) {// 創建Frame對象Frame f = new Frame();// 創建panel容器Panel p = new Panel();p.add(new Button("1"));// 默認垂直居中,間距為5p.add(new Button("2"));p.add(new Button("3"));p.add(new Button("4"));p.add(new Button("5"));p.add(new Button("6"));p.add(new Button("7"));p.add(new Button("8"));p.add(new Button("9"));f.add(p);// 設定Frame標題f.setTitle("我的第二個FlowLayoutManager程式");// 設定Frame尺寸,默認為(0,0) f.setSize(200, 200);// 設定是否可見,默認為falsef.setVisible(true);}}
結果為:
FlowLayout程式運行圖片FlowLayout程式運行圖片

相關詞條

熱門詞條

聯絡我們