天天看點

JAVA圖形界面(GUI)抽象工具集(AWT)和SwingSwing例子

前面的部落格中,我們寫的程式都屬于控制台程式,從這一篇開始,将為大家介紹如何編寫GUI程式,GUI意思是圖形讀者界面,比如我們用的QQ就屬于GUI程式。

抽象工具集(AWT)和Swing

JAVA GUI基本類庫位于

java.awt

包中,這個包稱為抽象視窗工具箱(Abstract Window Toolkit,AWT)。AWT中包含了很多圖形界面程式設計的類。它包括用來容納其它元件的容器類、用來控制進行元件布局的各種布局管理器、用來監聽程式與讀者進行互動的事件監聽器,還有一套繪圖機制,用來維護圖形界面等。

AWT的特點是簡單、穩定、重量級(依賴本地平台),AWT所涉及的類一般在java.awt包及其子包中。AWT主要類的繼承關系如圖所示:

JAVA圖形界面(GUI)抽象工具集(AWT)和SwingSwing例子

如果用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);
   }
}           

運作結果:

JAVA圖形界面(GUI)抽象工具集(AWT)和SwingSwing例子