AWT

從 华夏文化百科
跳到: 導覽搜尋

抽象窗口工具包 (Abstract Windowing Toolkit) (AWT)是Java的平台獨立的窗口系統, 圖形和用戶界面器件工具包。AWT是Java基礎類 (JFC)的一部分,為Java程序提供圖形用戶界面(GUI)的標準API


AWT提供了Java Applet和Java Application中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。


Java1.0的AWT(舊AWT)和Java1.1以後的AWT(新AWT)有着很大的區別,新的AWT克服了舊AWT的很多缺點,在設計上有較大改進,使用也更方便,這裏主要介紹新的AWT, 但在Java1.1及以後版本中舊的AWT的程序也可運行。


抽象窗口工具包AWT (Abstract Window 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中類的層次結構


在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或其子类中才能显示。 


二、使用AWT


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


·組件--Component ·容器--Container ·佈局管理器--LayoutManager


Java的图形用户界面的最基本组成部分是组件(Component),组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。 类java.awt.Component是许多组件类的父类,Component类中封装了组件通用的方法和属性,如图形的组件对象、大小、显示位置、前景色和背景色、边界、可见性等. 


容器(Container)也是一個類,實際上是Component的子類,因此容器本身也是一個組件,具有組件的所有性質,但是它的主要功能是容納其它組件和容器。佈局管理器(LayoutManager):每個容器都有一個佈局管理器,當容器需要對某個組件進行定位或判斷其大小尺寸時,就會調用其對應的佈局管理器。


容器java.awt.Container是Component的子类,一个容器可以容纳多个组件,并使它们成为一个整体。容器可以简化图形化界面的设计,以整体结构来布置界面。所有的容器都可以通过add()方法向容器中添加组件。有三种类型的容器:Window、Panel、ScrollPane,常用的有Panel, Frame, Applet。 


使用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); //調用父類的構造方法     }  }