先給出一段代碼,這是一個很簡單的Swing程序,而後在對程序內容做詳細講述。html
A simple Swing programjava
1 import javax.swing.*;windows
2 import java.awt.*;框架
3 public class SwingDemo{函數
4 public SwingDemo(){工具
5 JFrame jfrm=new JFrame("A Simple Swing Application");佈局
6 jfrm.setSize(275,100);線程
7 jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);設計
8 JLabel jlab=new JLabel("This is a text label.");htm
9 jfrm.add(jlab);
10 jfrm.setVisible(true);
11 }
12 public static void main(String[] args){
13 SwingUtilities.invokeLater(new Runnable(){
14 public void run(){
15 new SwingDemo();
16 }
17 });
18 }
19 }
Swing是用來彌補AWT的不足的,可是不能取代它,因此Swing GUI程序開頭都是包含進來swing包和awt包。GUI程序不一樣於傳統的控制檯程序,它但是有個很形象的窗口呈現給用戶的,因此實現出來顯得很親切,咱們從實現出來的這個窗口來推理下代碼應該包括什麼內容。窗口是windows裏最多見的了,一個窗口裏有標題欄工具欄按鈕等等一系列的組件,這些組件不是漂浮於空中的,而是生存在這個窗口裏的,這個窗口對應着Swing程序裏的容器這個概念。大致上就是這樣的過程:先設計出容器,再設計出組件,而後把組件添加到容器中併合理的佈局,佈局徹底是美觀的須要,這樣就寫出來一個SwingGUI程序了。注意這裏的容器和組件的關係看着很簡單,就是容器爲根,它能夠容納組件。然而實際的java類庫裏不是這麼看待兩者的,容器和組件渾然一體的,容器也是一種組件,容器內也能夠再放容器,簡單的說就是組件套組件,能夠套組件的組件就叫容器了。這種包含層次的結構要求其頂部必須是一個頂級容器。Swing定義了4種頂級容器:JFrame,JApplet,JWindow,JDialog。這些容器繼承自AWT類的Component和Container,說它們頂級是在Swing的框架內說的,放到AWT中仍是小弟,當不了老大,不過在Swing組件庫中確實一手遮天,表如今頂層容器不包含在任何其餘的容器中而且每一個包含層次必須從頂層容器開始,這4個容器稱做重量級容器。除了這4個頂級容器,其它的Swing組件都是從JComponent類派生的。例如用於標籤的類JLabel,用於按鈕的類JButton,用於複選框的類JCheckBox。既然有重量級容器,一樣就有輕量級容器,如JPanel,JScrollPane,JRootPane。這些固然也是派生自JComponent類了。它們常常用於組織和管理一組相關的組件。
關於Swing組件的基本體系搞懂了,接下來就考慮組件怎麼加到容器裏,代碼第9行告訴了咱們答案,看起來確實很簡單,再考慮一個問題,若是我加了不少組件進來,那麼這些組件怎麼擺放呢,這段代碼只加了一個,看不出來問題,若是加了一堆組件進來會不會窗口顯得很凌亂呢。這就須要佈局管理器來幫忙了。代碼中看不到佈局管理器對象,這是由於採用了默認的BorderLayout,注意這裏的默認是針對JFrame而言的,不一樣的頂級容器的默認佈局管理器可能不同。佈局管理器多數由AWT提供的,Swing也提供了本身的幾種,它們都是實現了LayoutManager接口的實例(某些還會實現LayoutManager2接口)。
如今組件放到容器裏了,而且也合理的佈局了,還遺漏了一些問題,好比說這些組件(包括容器)該起個名字吧,不過這個不用操心,由於生成這個組件對象的時候就往構造函數裏傳了參數用來起名字了。還有個問題是容器的大小,假如容器芝麻的大小你卻往裏放個西瓜大的組件,根本顯示不出來嘛。因此容器是要定製大小的,setSize()能夠知足須要,通常的組件是不須要這個函數來定製大小的,大小都是隨容器變化的,因此芝麻大小的容器是不會塞一個西瓜大的組件的,可是倒是個比芝麻還小的組件,和顯示不出來區別不大。
到了這裏感受還缺點什麼,對了,還缺事件的處理機制,好比說點關閉按鈕窗口會怎麼樣。這裏簡單的調用一個方法,setDefaultCloseOperation(),傳進的一個整型參數比如一個遙控器上的數字鍵,決定了這個操做的行爲。事件的處理機制隱藏於這個方法的實現中。第10行的setVisible()做用是顯示框架,初學者可能會忘記,不過這幾乎是GUI代碼的必備語句。最後的main方法看着有點不知所云,簡單解釋下,在全部狀況下,Swing GUI必須經過使用invokeLater()在事件調度線程上建立。這行代碼硬記住就好了。從語法上說用了一個匿名類。
本文轉自 ☆★ 一應俱全 ★☆ - www.baoluowanxiang.com 轉載請註明出處,侵權必究!
原文連接:http://www.baoluowanxiang.com/a/program/java/2010/0423/580.html