Swing[用戶界面開發工具包]

Swing[用戶界面開發工具包]
Swing[用戶界面開發工具包]
更多義項 ▼ 收起列表 ▲

Swing是一組Java程式元件,它能夠創建圖象用戶接口(GUI)元件,如按鈕和滾動條,它們獨立於特定作業系統的開視窗系統。Swing元件使用Java Foundation Classes(JFC)Swing開發人員只用很少的代碼就可以利用Swing豐富、靈活的功能和模組化組件來創建優雅的用戶界面。工具包中所有的包都是以swing作為名稱,例如javax.swing,javax.swing.event。它能夠創建圖象用戶接口(GUI)元件,如按鈕和滾動條,它們獨立於特定作業系統的開視窗系統。Swing元件使用Java Foundation Classes(JFC)。

基本信息

簡介

Swing網際網路基礎類(IFC)是網景公司最初為Java開發的圖形庫,第一次發布於1996年12月16日。
swing界面swing界面

在1997年4月2日,太陽微系統公司和網景公司宣稱他們要將IFC和其他技術合併形成Java基礎類。作為IFC最初提供組件的附加品,Swing引進了一個機理:在不改變大量的程式代碼前提下允許程式中每個組件觀感的變化。支持可更換觀感技術的引入允許Swing組件在模擬原生組件外觀的同時又保持了平台獨立的優點。
Swing是一個為Java設計的GUI工具包。Swing是JavaAPI的一部分。Swing包括了圖形用戶界面(GUI)器件如:文本框,按鈕,分隔窗格和表。
Swing提供許多比AWT更好的螢幕顯示元素。它們用純Java寫成,所以同Java本身一樣可以跨平台運行,這一點不像AWT。它們是JFC的一部分。它們支持可更換的觀感和主題(各種作業系統默認的特有主題),然而不是真的使用原生平台提供的設備,而是僅僅在表面上模仿它們。這意味著你可以在任意平台上使用Java支持的任意觀感。輕量級元件的缺點則是執行速度較慢,優點就是可以在所有平台上採用統一的行為。

聯繫區別

Swing和AWT的關係

Java的早期版本以來,抽象視窗工具包為用戶界面組件提供了平台獨立的API。在AWT中,每個組件都由一個原生的等同組件生成和控制,這個原生組件是由當前的圖形視窗系統決定的。
與此相對,Swing組件經常被描述為輕量級的,因為它們不需要作業系統本身所帶視窗工具包的原生資源來生成。
SwingAPI的大部分是AWT的補充擴展而不是直接的代替。Swing用來繪製輕量級組件的核心渲染功能是由Java 2D提供的,這是AWT的一部分。然而,輕量級和重量級組件在同一個套用中使用會導致Z-order不兼容。

Swing和SWT的關係

標準器件工具包是一個最初由IBM開發的工具包,現在由Eclipse基金會維護。SWT的實現同重量級的組件AWT有更多的共同之處。這樣的好處是運行開銷同所在平台的原生視窗工具包更為接近。
SWT的到來使得Java桌面的開發者們分離為SWT的支持者和Swing的支持者。在即將到來的6.0版Java中,Swing的新修補專注於同原生原生視窗平台的逼真度,這可能會直接解決這個問題。

Swing與AWT的區別

Swing為基於窗體的GUI套用開發設計,為Java跨平台特性提供了卓越的支持.它完全沒有本地代碼,不受作業系統的影響,做到了真正的跨平台套用,甚至能夠提供本地視窗系統不支持的其它特性。因此比AWT具有更強的實用性,同時比AWT程式擁有更加精緻的外觀感受。
AWT只提供基本的組件,使很多設計變得複雜,且無法在不同的平台下保持顯示風格的一致性。例如:如果建立一個按鈕(Button)對象,就會有一個按鈕(ButtonPeer)同其對象一起被建立,然後此按鈕對象會請求底層作業系統創建一個真正的按鈕。即在WindowsNT上執行,那么創建的就是WindowsNT按鈕;在Linux上執行,那么創建的就是Linux按鈕。因此AWT組件外觀會受到底層作業系統的影響.
Swing全螢幕幕模式使用方法
關鍵是java.awt.*裡面的兩個與顯示設備有關的類:GraphicsEnvironment和GraphicsDevice。
GraphicsEnvironment為Java應用程式提供了特定平台的GraphicsDevice對象和Font對象集合。這些GraphicsDevice可以是各種本機和遠端機器的資源,如螢幕、印表機或者是ImageBuffer,甚至是Graphics2D繪圖方法的目標對象。
而GraphicsDevice就是指特定的圖形環境了,如螢幕和列印設備等。這樣,我們就可以用GraphicsDevice來操縱螢幕了。GraphicsDevice提供的set Full Screen Window(全螢幕)方法就是設定全螢幕幕用的。
由於GraphicsEnvironment的構造器是受保護的(protected),我們不能直接構造一個GraphicsEnvironment對象來獲得GraphicsDevice對象。

操作步驟

(1)導入Swing包
swingswing

(2)選擇界面風格
(3)設定頂層容器
(4)設定按鈕和標籤
(5)將組件放到容器上
(6)為組件增加框線
(7)處理事件
(8)輔助技術支持

具體操作

導入

下面語句導入Swing包
importjavax.swing.*;
大部分Swing程式用到了AWT的基礎底層結構和事件模型,因此需要導入兩個包:
importjava.awt.*;
importjava.awt.event.*;
如果圖形界面中包括了事件處理,那么還需要導入事件處理包:
importjavax.swing.event.*;

選擇界面風格

Swing允許選擇程式的圖形界面風格常用的有java風格,windows風格等
下面的代碼用於選擇圖形界面風格,這裡選擇的是跨平台的Java界面風格。
try{UIManager.setLookAndFeel(
UIManager.getCrossPlatformLookAndFeelClassName());}
catch(Exceptione){}

設定頂層容器

圖形界面至少要有一個頂級Swing容器
頂級Swing容器為其它Swing組件在螢幕上的繪製和處理事件提供支持
常用的頂級容器:
JFrame(框架):表示主程式視窗
JDialog(對話框):每個JDialog對象表示一個對話框,對話框屬於二級視窗
JApplet(小程式):在瀏覽器內顯示一個小程式界面
一個框架包括邊界、選單欄、工具列、狀態欄,以及中間占主要部分的窗格
窗格也可以看作是一種面板,但它是框架的一個組成部分
組件不會直接放到框架上,而是放在若干個面板上,這些面板再放到窗格上
用框架對象的getContentPane()函式來獲得窗格,再調用窗格的add()函式放置面板
publicstaticvoidmain(String[]args){JFrameframe=newJFrame("SwingApplication");
JPanelpanel1=newJPanel();
frame.getContentPane().add(panel1,BorderLayout.CENTER);
......//

添加組件

frame.pack();frame.setVisible(true);}

套用

模式

關鍵是java.awt.*裡面的兩個與顯示設備有關的類:GraphicsEnvironment和GraphicsDevice。
GraphicsEnvironment為Java應用程式提供了特定平台的GraphicsDevice對象和Font對象集合。這些GraphicsDevice可以是各種本機和遠端機器的資源,如螢幕、印表機或者是ImageBuffer,甚至是Graphics2D繪圖方法的目標對象。
而GraphicsDevice就是指特定的圖形環境了,如螢幕和列印設備等。這樣,我們就可以用GraphicsDevice來操縱螢幕了。GraphicsDevice提供的setFullScreenWindow()方法就是設定全螢幕幕用的。

事件處理

監聽器:Action Listener
方法:action Performed
事件:Action Event
●Stringget Action Command()
actioncommand是控制項內部的一個字元串,用於標識控制項的狀態。
此函式可以取得控制項的狀態,從而決定到底該做什麼。
●intget Modifiers()
取得“產生此事件時,用戶同時按下的組合鍵”
●longget When()
取得“產生此事件時的時間戳”
事件產生原因:點擊按鈕,在列表框中選擇內容,在文本框中點回車,計時器到期
監聽器:Adjustment Listener
方法:adjustment Value Changed
事件:Adjustment Event
●AdjustablegetAdjustable()
adjustable是一個接口,各種滾動條都實現了這個接口。
●intget AdjustmentType()
取得滾動類型,共有UNIT_INCREMENT,UNIT_DECREMENT,BLOCK_INCREMENT,BLOCK_DECREMENT,TRACK共5種類型
●intget Value()
取得滾動滑塊的當前值
事件產生原因:滾動條的滾動
監聽器:Item Listener
方法:item State Changed
事件:ItemEvent
●ObjedtgetItem()
取得被選中的元素。注意,返回值是Object,還應該進行強制類型轉換。
●Item Selectableget Item Seletable()
ItemSelectable是一個接口,代表那些包含了n個可供選擇的子元素的對象。此方法返回產生此事件的對象。此方法的作用主要在於,如果一個列表框是允許多選的,那么上面的方法就不好用了,應該用此方法得到列表對象,再取得被選中的多個元素。
●intgetStateChange()
取得選擇的狀態,是SELECTED還是DESELECTED
事件產生原因:各種按鈕的點擊,列表框的選擇
監聽器:Focus Listener
方法:focusGained、focusLost
事件:Focus Event
●Componentget Opposite Component()
得到“參與焦點變換的”另一個對象。如果是焦點取得事件,則返回之前擁有焦點的對象;如果是焦點失去事件,則返回得到焦點的對象。若焦點轉移到另外一個應用程式,返回null
●booleanis Temporary()
焦點是臨時性轉移還是永久轉移。臨時性轉移:用滑鼠拖動視窗或者視窗變為非激活狀態。其他為永久性轉移。
事件產生原因:各種組件的焦點變化
監聽器:Key Listener
方法:key Pressed、key Released、key Typed
事件:Key Event
●charget KeyChar()
此方法只在keytyped中有效,返回按下的字元。比如按下shift+a,返回'A'
●intgetKeyCode()
取得鍵盤上按鍵的整數編碼。請注意,是鍵盤上的按鍵,比如F1,Ctrl,Home鍵等等,都有相應編碼。不支持組合鍵,也就是說“Shift+a”和“a”返回同樣的內容,都是小寫a的ASCII碼。但是大鍵盤的數字鍵和小鍵盤的數字鍵返回內容不同。
●staticStringget Key Modifiers Text(intmodifiers)
將掩碼轉化為字元串,比如“Ctrl”,“Ctrl+Shift”等。注意它是static方法
●staticStringget Key Text(intkeyCode)
返回keyCode代表的按鈕的名字,比如"Home","F1"等。注意它是statci方法
事件產生原因:在各種組件上敲擊鍵盤
監聽器:Mouse Listener
方法:mouse Clicked、mouse Pressed、mouse Released
mouse Entered、mouse Exited
事件:Mouse Event
●Pointget Location On Screen()
返回滑鼠相對於顯示螢幕的絕對坐標(Java1.6版提供)
●intget X On Screen()
返回滑鼠相對於顯示螢幕的X的絕對坐標(java1.6版提供)
●intget Y On Screen()
返回滑鼠相對於顯示螢幕的Y的絕對坐標(java1.6版提供)
●Pointget Point()
返回滑鼠相對於組件的絕對坐標
●intget X()
返回滑鼠相對於組件的X的絕對坐標
●intget Y()
返回滑鼠相對於組件的Y的絕對坐標
●voidtranslate Point(intx,inty)
給滑鼠的做用點加上一個偏移量。比如2個參數分別是10,20,你要用滑鼠畫直線,當你滑鼠指向100,100開始畫,實際上的線是畫在110,120處
●intget Click Count()
產生此事件時滑鼠共點擊了多少下(單擊、雙擊、三擊……)
●intget Button()
產生此事件時,滑鼠的哪個鍵被點擊了:NOBUTTON,BUTTON1,BUTTON2或者BUTTON3
●booleanis Popup Trigger()
是否能夠觸發一個彈出式選單。由於各平台觸發彈出式選單的情況不一樣,因此應該在mousePressed和mouseReleased中都檢測一下
事件產生原因:在任何組件上點擊滑鼠、將游標移動進來或出去
監聽器:Mouse Motion Listener
方法:mouseDragged、mouseMoved
事件:Mouse Event
事件產生原因:在任何組件上移動滑鼠
監聽器:Mouse Wheel Listener
方法:mouse Wheel Moved
事件:Mouse Wheel Event
●intget Scroll Type()
滾動的類型,是按塊滾動WHEEL_BLOCK_SCROLL還是按單位滾動WHEEL_UNIT_SCROLL
●intget Scroll Amount()
返回為相應此事件應該滾動的單位數。此方法有效的前提是按單位滾動。
●intget Wheel Rotation()
滑鼠滾輪滾動過程中”咔嚓“聲的數目。向上滾為負值,向下滾為正值
事件產生原因:在任何組件上滾動滑鼠中鍵
監聽器:Window Listener
方法:window Opened、window Closing、window Closed、window Iconified
window Deiconified、window Activated、window Deactivated
事件:WindowEvent
●WindowgetWindow()
返回發生此事件的window對象
●WindowgetOppositeWindow()
若發生了焦點轉移,返回另一個參與此事件的window對象,或者null
●intgetOldState()
視窗變化前的狀態:NORMAL、ICONIFIED、MAXIMIZED_BOTH
●intgetNewState()
視窗變化後的狀態
事件產生原因:視窗發生變化
監聽器:WindowFocusListener
方法:windowGainedFocus、windowLostFocus
事件:WindowEvent
事件產生原因:視窗得到或失去焦點
監聽器:WindowstateListener
方法:WindowstateChanged
事件:WindowEvent
事件產生原因:視窗狀態改變

相關詞條

相關搜尋

熱門詞條

聯絡我們