前面的部落格中,我們寫的程式都屬于控制台程式,從這一篇開始,将為大家介紹如何編寫GUI程式,GUI意思是圖形讀者界面,比如我們用的QQ就屬于GUI程式。
抽象工具集(AWT)和Swing
JAVA GUI基本類庫位于
java.awt
包中,這個包稱為抽象視窗工具箱(Abstract Window Toolkit,AWT)。AWT中包含了很多圖形界面程式設計的類。它包括用來容納其它元件的容器類、用來控制進行元件布局的各種布局管理器、用來監聽程式與讀者進行互動的事件監聽器,還有一套繪圖機制,用來維護圖形界面等。
AWT的特點是簡單、穩定、重量級(依賴本地平台),AWT所涉及的類一般在java.awt包及其子包中。AWT主要類的繼承關系如圖所示:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICO0ETN1kjMyIDMzITM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
如果用AWT元件設計出來的圖形界面,讀者會發現視窗中的元件,如按鈕等都是與作業系統相對應的元件是基本一緻的,是以利用AWT設計的程式在不同作業系統中運作的效果是不一緻的。AWT實作中對平台是有依賴的,它的相關元件是重量級,不夠靈活。如果平台上沒有相關元件,則其應用就沒辦法實作。
Swing是基于AWT的,它除了頂級元件是重量級的,而其他的元件例如按鈕、文本框等還有布局都與作業系統無關,是輕量級的。Swing保證了可移植性,完全用java語言編寫,和AWT相比,Swing提供了更多的元件,引入了更多的新的特性和能力。Swing增強了AWT中元件的功能,這些增強的元件命名通常在AWT元件名前加一個“J”字母。
Swing的類結構如下:
java.lang.Object
+–java.awt.Component
+–java.awt.Container
+–javax.swing.JComponent
Swing沒有完全放棄AWT,而是基于AWT之上提供了更強大的讀者界面元件。而且Swing圖形元件使用AWT事件類和監聽接口處理事件響應。AWT和Swing元件混合使用可能産生一些無法預料的錯誤,同一個程式不建議混合使用。
Swing例子
下面這個例子隻是示範一下Swing的運作效果。
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class SwingDemo extends JFrame
{
private DrawPanel drawPanel = null;
public SwingDemo()
{
super("SwingDemo");
drawPanel = new DrawPanel();
add(drawPanel);
setSize(300, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new SwingDemo().setVisible(true);
}
}
class DrawPanel extends JPanel
{
@Override
public void paint(Graphics g)
{
super.paint(g);
g.drawString("Hello Swing", 10, 50);
}
}
運作結果: