複製鏈接
請複製以下鏈接發送給好友

Swing

(用户界面開發工具包)

鎖定
Swing是一個用於開發Java應用程序用户界面開發工具包。
以抽象窗口工具包(AWT)為基礎使跨平台應用程序可以使用任何可插拔的外觀風格。Swing開發人員只用很少的代碼就可以利用Swing豐富、靈活的功能和模塊化組件來創建優雅的用户界面。 工具包中所有的包都是以swing作為名稱,例如javax.swing,javax.swing.event。
中文名
Swing
性    質
開發工具包
功    能
開發Java應用程序用户界面
基    礎
抽象窗口工具包(AWT)
特    點
豐富、靈活的功能和模塊化組件
示    例
avax.swing,javax.swing.event

Swing步驟

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

Swing導入

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

Swing選擇界面風格

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

Swing設置頂層容器

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

Swing添加組件

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

Swing應用

Swing模式

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

Swing事件處理

方 法:actionPerformed
事 件:ActionEvent
● String getActionCommand()
actioncommand是控件內部的一個字符串,用於標識控件的狀態。
此函數可以取得控件的狀態,從而決定到底該做什麼。
● int getModifiers()
取得“產生此事件時,用户同時按下的組合鍵
● long getWhen()
取得“產生此事件時的時間戳
事件產生原因:點擊按鈕,在列表框中選擇內容,在文本框中點回車,計時器到期
監聽器:AdjustmentListener
方 法:adjustmentValueChanged
事 件:AdjustmentEvent
● Adjustable getAdjustable()
adjustable是一個接口,各種滾動條都實現了這個接口。
● int getAdjustmentType()
取得滾動類型,共有UNIT_INCREMENT,UNIT_DECREMENT,BLOCK_INCREMENT,BLOCK_DECREMENT,TRACK共5種類型
● int getValue()
取得滾動滑塊的當前值
事件產生原因:滾動條的滾動
監聽器:ItemListener
方 法:itemStateChanged
事 件:ItemEvent
● Object getItem()
取得被選中的元素。注意,返回值是Object,還應該進行強制類型轉換
● ItemSelectable getItemSelectable()
ItemSelectable是一個接口,代表那些包含了n個可供選擇的子元素的對象。此方法返回產生此事件的對象。此方法的作用主要在於,如果一個列表框是允許多選的,那麼上面的方法就不好用了,應該用此方法得到列表對象,再取得被選中的多個元素。
● int getStateChange()
取得選擇的狀態,是SELECTED還是DESELECTED
事件產生原因:各種按鈕的點擊,列表框的選擇
監聽器:FocusListener
方 法:focusGained、focusLost
事 件:FocusEvent
● Component getOppositeComponent()
得到“參與焦點變換的”另一個對象。如果是焦點取得事件,則返回之前擁有焦點的對象;如果是焦點失去事件,則返回得到焦點的對象。若焦點轉移到另外一個應用程序,返回null
● boolean isTemporary()
焦點是臨時性轉移還是永久轉移。臨時性轉移:用鼠標拖動窗口或者窗口變為非激活狀態。其他為永久性轉移。
事件產生原因:各種組件的焦點變化
監聽器:KeyListener
方 法:keyPressed、keyReleased、keyTyped
事 件:KeyEvent
● char getKeyChar()
此方法只在keytyped中有效,返回按下的字符。比如按下shift+a,返回'A'
● int getKeyCode()
取得鍵盤上按鍵的整數編碼。請注意,是鍵盤上的按鍵,比如F1,Ctrl,Home鍵等等,都有相應編碼。不支持組合鍵,也就是説“Shift+a”和“a”返回同樣的內容,都是小寫a的ASCII碼。但是大鍵盤的數字鍵和小鍵盤的數字鍵返回內容不同。
● static String getKeyModifiersText(int modifiers)
掩碼轉化為字符串,比如“Ctrl”,“Ctrl+Shift”等。注意它是static方法
● static String getKeyText(int keyCode)
返回keyCode代表的按鈕的名字,比如"Home","F1"等。注意它是static方法
事件產生原因:在各種組件上敲擊鍵盤
監聽器:MouseListener
方 法:mouseClicked、mousePressed、mouseReleased
mouseEntered、mouseExited
事 件:MouseEvent
● Point getLocationOnScreen()
返回鼠標相對於顯示屏幕絕對座標(Java1.6版提供)
● int getXOnScreen()
返回鼠標相對於顯示屏幕的X的絕對座標(java 1.6版提供)
● int getYOnScreen()
返回鼠標相對於顯示屏幕的Y的絕對座標(java 1.6版提供)
● Point getPoint()
返回鼠標相對於組件的絕對座標
● int getX()
返回鼠標相對於組件的X的絕對座標
● int getY()
返回鼠標相對於組件的Y的絕對座標
● void translatePoint(int x, int y)
給鼠標的做用點加上一個偏移量。比如2個參數分別是10, 20,你要用鼠標畫直線,當你鼠標指向100,100開始畫,實際上的線是畫在110,120處
● int getClickCount()
產生此事件時鼠標共點擊了多少下(單擊、雙擊、三擊……)
● int getButton()
產生此事件時,鼠標的哪個鍵被點擊了:NOBUTTON, BUTTON1, BUTTON2 或者 BUTTON3
● boolean isPopupTrigger()
是否能夠觸發一個彈出式菜單。由於各平台觸發彈出式菜單的情況不一樣,因此應該在mousePressed 和 mouseReleased中都檢測一下
事件產生原因:在任何組件上點擊鼠標、將光標移動進來或出去
監聽器:MouseMotionListener
方 法:mouseDragged、mouseMoved
事 件:MouseEvent
事件產生原因:在任何組件上移動鼠標
監聽器:MouseWheelListener
方 法:mouseWheelMoved
事 件:MouseWheelEvent
● int getScrollType()
滾動的類型,是按塊滾動WHEEL_BLOCK_SCROLL還是按單位滾動WHEEL_UNIT_SCROLL
● int getScrollAmount()
返回為相應此事件應該滾動的單位數。此方法有效的前提是按單位滾動。
● int getWheelRotation()
鼠標滾輪滾動過程中”咔嚓“聲的數目。向上滾為負值,向下滾為正值
事件產生原因:在任何組件上滾動鼠標中鍵
監聽器:WindowListener
方 法:windowOpened、windowClosing、windowClosed、windowIconified
windowDeiconified、windowActivated、windowDeactivated
事 件:WindowEvent
● Window getWindow()
返回發生此事件的window對象
● Window getOppositeWindow()
若發生了焦點轉移,返回另一個參與此事件的window對象,或者null
● int getOldState()
窗口變化前的狀態:NORMAL、ICONIFIED、MAXIMIZED_BOTH
● int getNewState()
窗口變化後的狀態
事件產生原因:窗口發生變化
監聽器:WindowFocusListener
方 法:windowGainedFocus、windowLostFocus
事 件:WindowEvent
事件產生原因:窗口得到或失去焦點
監聽器:WindowstateListener
方 法:WindowstateChanged
事 件:WindowEvent
事件產生原因:窗口狀態改變
參考資料