AWT是抽象視窗工具包,是API為Java 程式提供的建立圖形使用者介面GUI (Graphics User Interface)工具集,AWT可用於Java的applet和applications中。它支援圖形使用者介面程式設計的功能包括: 使用者介面元件;事件處理模型;圖形和影象工具,包括形狀、顏色和字型類;佈局管理器,可以進行靈活的視窗布局而與特定視窗的尺寸和螢幕解析度無關;資料傳送類,可以通過本地平臺的剪貼簿來進行剪下和貼上。
java.awt包提供了基本的java程式的GUI設計工具。主要包括下述三個概念:
- 元件--Component
- 容器--Container
- 佈局管理器--LayoutManager
元件和容器
Java的圖形使用者介面的最基本組成部分是元件(Component),元件是一個可以以圖形化的方式顯示在螢幕上並能與使用者進行互動的物件,例如一個按鈕,一個標籤等。元件不能獨立地顯示出來,必須將元件放在一定的容器中才可以顯示出來。
類java.awt.Component是許多元件類的父類,Component類中封裝了元件通用的方法和屬性,如圖形的元件物件、大小、顯示位置、前景色和背景色、邊界、可見性等,因此許多元件類也就繼承了Component類的成員方法和成員變數,相應的成員方法包括:
getComponentAt(int x, int y)
getFont()
getForeground()
getName()
getSize()
paint(Graphics g)
repaint()
update()
setVisible(boolean b)
setSize(Dimension d)
setName(String name)等
容器(Container)也是一個類,實際上是Component的子類,因此容器本身也是一個元件,具有元件的所有性質,但是它的主要功能是容納其它元件和容器。
佈局管理器(LayoutManager):每個容器都有一個佈局管理器,當容器需要對某個元件進行定位或判斷其大小尺寸時,就會呼叫其對應的佈局管理器。
為了使我們生成的圖形使用者介面具有良好的平臺無關性,Java語言中,提供了佈局管理器這個工具來管理元件在容器中的佈局,而不使用直接設定元件位置和大小的方式。
在程式中安排元件的位置和大小時,應該注意以下兩點:
1.容器中的佈局管理器負責各個元件的大小和位置,因此使用者無法在這種情況下設定元件的這些屬性。如果試圖使用Java 語言提供的setLocation(),setSize(),setBounds() 等方法,則都會被佈局管理器覆蓋。
2.如果使用者確實需要親自設定元件大小或位置,則應取消該容器的佈局管理器,方法為:
setLayout(null);
常用容器
容器java.awt.Container是Component的子類,一個容器可以容納多個元件,並使它們成為一個整體。容器可以簡化圖形化介面的設計,以整體結構來佈置介面。所有的容器都可以通過add()方法向容器中新增元件。
有三種型別的容器:Window、Panel、ScrollPane,常用的有Panel, Frame, Applet。
1.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); //呼叫父類的構造方法
}
}
一般我們要生成一個視窗,通常是用Window的子類Frame來進行例項化,而不是直接用到Window類。Frame的外觀就像我們平常在windows系統下見到的視窗,有標題、邊框、選單、大小等等。每個Frame的物件例項化以後,都是沒有大小和不可見的,因此必須呼叫setSize( )來設定大小,呼叫setVisible(true)來設定該視窗為可見的。
另外,AWT在實際的執行過程中是呼叫所在平臺的圖形系統,因此同樣一段AWT程式在不同的作業系統平臺下執行所看到的圖形系統是不一樣的。例如在windows下執行,則顯示的視窗是windows風格的視窗;而在UNIX下執行時,則顯示的是UNIX風格的視窗。
2. Panel
````
import java.awt.*;
public class FrameWithPanel extends Frame{
public FrameWithPanel(String str){
super(str);
}
public static void main(String args[]){
FrameWithPanel fr = new FrameWithPanel("Frame with Panel");
Panel pan=new Panel();
fr.setSize(200,200);
fr.setBackground(Color.red);
//框架fr的背景顏色設定為紅色
fr.setLayout(null);
//取消佈局管理器
pan.setSize(100,100);
pan.setBackground(Color.yellow);
//設定皮膚pan的背景顏色為黃色
fr.add(pan); //用add方法把皮膚pan新增到框架fr中
fr.setVisible(true);
}
}
```
檢視執行結果
一般我們要生成一個視窗,通常是用Window的子類Frame來進行例項化,而不是直接用到Window類。Frame的外觀就像我們平常在windows系統下見到的視窗,有標題、邊框、選單、大小等等。每個Frame的物件例項化以後,都是沒有大小和不可見的,因此必須呼叫setSize( )來設定大小,呼叫setVisible(true)來設定該視窗為可見的。