Swing (Java)
Swing是一個為Java設計的GUI工具包,屬於Java基礎類的一部分。Swing包括了圖形化使用者介面(GUI)功能,其組件包含:文字方塊、文字域、按鈕、表格、列表等。
Swing提供許多比AWT更好的螢幕顯示元素。它們用純Java寫成,所以同Java本身一樣可以跨平台執行,這一點不像AWT。它們是JFC的一部分。它們支援可更換的面板和主題(各種作業系統預設的特有主題),然而不是真的使用原生平台提供的裝置,而是僅僅在表面上模仿它們。這意味著你可以在任意平台上使用Java支援的任意面板。輕量級元件的缺點則是執行速度較慢,優點就是可以在所有平台上採用統一的行為。
Hello World程式
Swing程式
HelloWorldSwing.java
import javax.swing.*;
public class HelloWorldSwing {
/**
* 创建并显示GUI。出于线程安全的考虑,
* 这个方法在事件调用线程中调用。
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
//Create and set up the window.
JFrame frame = new JFrame("HelloWorldSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the ubiquitous "Hello World" label.
JLabel label = new JLabel("Hello World");
frame.getContentPane().add(label);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
歷史
網際網路基礎類(IFC)是網景公司最初為Java開發的圖形庫,第一次發布於1996年12月16日。
在1997年4月2日,太陽公司和網景公司宣稱他們要將IFC和其他技術合併形成Java基礎類。作為IFC最初提供組件的附加品,Swing引進了一個機制:在不改變大量的程式碼前提下允許程式中每個組件面板的變化。支援可更換面板技術的引入允許Swing組件在類比原生組件外觀的同時又保持了平台獨立的優點。
架構
Swing是一個基於Java的跨平台MVC框架。使用單執行緒模式。此框架還在代碼結構層和圖形彩現層之間插入了一個抽象層。
可延伸性
Swing使用了高度模組化的架構,可以通過介面的方式使用各種客製化框架來擴充Swing。使用者可以通過Java的繼承機制重寫原始的組件來實現自己的代碼。[1]
Swing是一個基於組件的框架,所有的組件都是從javax.swing.JComponent類繼承來的。Swing對象通過非同步方式傳送事件,具有邊界屬性,並且會回應該組件的一系列方法。Swing組件是Java Beans組件,和Java Beans組件架構完全保持一致。
可客製化性
Swing提供了可程式化彩現模型,使使用者可以對彩現細節進行控制。一般來看,Swing組件的視覺效果是一些通用元素的組合,比如外框、邊距、窗口裝飾等等。典型的情況是,使用者通過編寫代碼,指定邊框、顏色、背景、透明度等屬性來客製化一種通用Swing組件(如JTable)。核心組件則會用這些客製化的屬性來進行繪製。此外,也完全可以製作出非常特殊的GUI控制項或是高度自訂的視覺效果。
-
Swing個性化繪製1
-
Swing個性化繪製2
-
Swing個性化繪製3
可組態性
Swing高度基於執行時的機制以及其間接的組合模式使得它可以在執行時回應對其底層設定的改變。例如,一個Swing的應用程式能在執行時動態地改變介面。此外,使用者還能隨時應用他們自己的Look And Feel。Look And Feel能夠統一地改變當前程式的組件外觀,而不用修改任何代碼。
和AWT的關係
Java的早期版本以來,抽象視窗工具包為使用者介面組件提供了平台獨立的API。在AWT中,每個組件都由一個原生的等同組件生成和控制,這個原生組件是由當前的圖形視窗系統決定的。
與此相對,Swing組件經常被描述為輕量級的,因為它們不需要作業系統本身所帶視窗工具包的原生資源來生成。
Swing API的大部分是AWT的補充擴充而不是直接的代替。Swing用來繪製輕量級組件的核心彩現功能是由Java2D提供的,這是AWT的一部分。然而,輕量級和重量級組件在同一個應用中使用會導致Z-order不相容。
同SWT的關係
標準器件工具包 (SWT)是一個最初由IBM開發的工具包,現在由Eclipse基金會維護。SWT的實現同重量級的組件AWT有更多的共同之處。這樣的好處是執行開銷同所在平台的原生視窗工具包更為接近。
SWT的到來使得Java桌面的開發者們分離為SWT的支持者和Swing的支持者。在6.0版Java中,Swing的新修補專注於同原生視窗平台的逼真度,這可能會直接解決這個問題。
參考文獻
參照
- ^ "LookAndFeel (Java Platform SE 7 )", Oracle Documentation, http://docs.oracle.com/javase/7/docs/api/javax/swing/LookAndFeel.html (頁面存檔備份,存於網際網路檔案館), 5/26/2012
書籍
- Matthew Robinson:Swing, Manning, ISBN 1-930110-88-X
- David M. Geary:Graphic Java 2, Volume 2: Swing, Prentice Hall, ISBN 0-13-079667-0
- James Elliott,Robert Eckstein,Marc Loy,David Wood,Brian Cole:Java Swing, O'Reilly, ISBN 0-596-00408-7
- Kathy Walrath,Mary Campione,Alison Huml,Sharon Zakhour:The JFC Swing Tutorial: A Guide to Constructing GUIs, Addison-Wesley Professional, ISBN 0-201-91467-0
外部連結
- Swing教程(頁面存檔備份,存於網際網路檔案館)
- The Swing Connection(頁面存檔備份,存於網際網路檔案館)
- JavaDesktop
- Java觀感(頁面存檔備份,存於網際網路檔案館)
- ClientJava.com
- Presentation "Swing專家編程:建立優雅的程式,第一部分" by Ben Galbraith
- Presentation "Swing專家編程:建立優雅的程式,第二部分" by Ben Galbraith
- Article "什麼叫「Swing很慢?」" by Sermet Yucel
- Article "Java桌面開發(頁面存檔備份,存於網際網路檔案館)" by Andrei Cioroianu
- Article "BlackMamba:一個Swing的實例學習(頁面存檔備份,存於網際網路檔案館)" by Ashwin Jayaprakash
- 有關AWT/Swing的文章
- Citations from CiteSeer(頁面存檔備份,存於網際網路檔案館)
- Swing wiki包含了最棒的練習、技巧、訣竅以及如何入門