偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解Swing組件相應外觀

開發(fā) 后端
本文詳細介紹Swing組件相應外觀,Swing包含幾個UI委托集。每個集合中包含了用于大部分Swing組件的ComponentUI實現(xiàn),且每個這樣的集合稱為一個PLAF實現(xiàn)。

Swing將每個組件的視圖和控制封裝到一個稱為UI委托的對象中。

因此,Swing的體系結(jié)構(gòu)被稱為模型委托結(jié)構(gòu)而不是模式-視圖-控制器結(jié)構(gòu)。理想情況下,模型和UI委托直接的通訊是間接的,允許多個模型與一個UI委托相連,反之亦然。

UI委托

每個UI委托源自一個名為ComponentUI的抽象類。ComponentUI的方法描述了一個UI委托和使用它的組件之間進行通訊的基本原理。

注意的是每個方法都將JComponent作為一個參數(shù)。ComponentUI有很多方法,這里只給出幾個最重要的:
◆static ComponentUI createUI(JComponent c):該方法通常用來返回UI委托的一個共享實例,該UI委托通過定義ComponentUI子類本身而定義。這個共享實例用于相同類型的組件之間的共享(例如,所有使用金屬外觀的JButtons共享同樣的靜態(tài)UI委托實例,默認情況下,該委托實例在javax.swing.plaf.metal.MetalButtonUI中定義。
◆InstallUI(JComponent c):該方法在特定的組件上安裝ComponentUI。通常會給組件和它的模型添加一個監(jiān)聽器,當狀態(tài)發(fā)生改變時來通知UI委托進行視圖的更新。
◆Update (Graphics g, JComponent c):如果組件是不透明的,那么應該描繪它的背景并調(diào)用paint(Graphics g,JComponent C)方法。
◆Paint (Graphics g, JComponent c):為了能夠正確地描繪,該方法要從組件收集所有需要的信息以及可能的模型。

為了增強特定UI委托的使用,我們可以調(diào)用一個組件的setUI()方法,如下所示:


JComponent類中定義了用于分配UI委托的方法,因為方法聲明中不包含特定組件代碼。然而,對數(shù)據(jù)模型而言這是不可能的,因為不存在所有模型可以追溯到的基接口(例如,不存在像Swing模型中的ComponentUI此類的基類)。為此,分配模型的方法在JComponent的子類中定義。

使用PLAF

Swing包含幾個UI委托集。每個集合中包含了用于大部分Swing組件的ComponentUI實現(xiàn),且每個這樣的集合稱為一個PLAF實現(xiàn)。

javax.swing.plaf包有繼承自ComponentUI的抽象類組成,javax.swing.plaf.basic包中的類擴展了這些抽象類用來實現(xiàn)基本的外觀。UI委托集合是所有其它外觀類用作構(gòu)建自己的外觀的基類?;就庥^不能自己使用因為BasicLookAndFeel是一個抽象類。有三個繼承自BasicLookAndFeel的可插拔式外觀實現(xiàn):
◆Windows: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
◆CDEMotif: com.sun.java.swing.plaf.motif.MotifLookAndFeel
◆Metal (default): javax.swing.plaf.metal.MetalLookAndFeel

同時還有一個模仿蘋果用戶接口的MacLookAndFeel,但是沒有包含在Java2中,必須單獨下載。多路外觀javax.swing.plaf.multi.MultiLookAndFeel擴展了javax.swing.plaf中的所有抽象類。它運行同時使用多種外觀的組合,且有意但并不僅限于和訪問外觀一起使用。每個多路UI委托的任務是管理每個它們的子UI委托。

每個外觀包中都包含了一個繼承自抽象類javax.swing.LookAndFeel:BasicLookAndFeel, MetalLookAndFeel, WindowsLookAndFeel等的類。這是訪問每個外觀包的中心點。當改變當前外觀時,你會用到它們。同時UIManager類(用于管理安裝的外觀)使用它們來訪問當前外觀UIDefaults表(其中包含了用于每個Swing組件相應外觀的UI委托類名稱)。

要想改變應用的當前外觀,你只需要簡單調(diào)用UIManager的setLookAndFeel()方法,并將要使用的外觀全名傳遞給該方法即可。

創(chuàng)建一個PLAF

在創(chuàng)建一個PLAF之前,你必須在Java中創(chuàng)建外觀的兩種設計方法中做出決定。其中一種方法是通過擴展javax.swing.plaf包來創(chuàng)建外觀,另一種方法是通過擴展已經(jīng)存在的外觀包,通常是javax.swing.plaf.basic來實現(xiàn)。

如果要創(chuàng)建一個用于PC的外觀,我們不推薦使用擴展來自javax.swing.plaf包中的外觀的方法。這是因為javax.swing.basic包中已經(jīng)擴展了幾乎整個的javax.swing.plaf包供我們使用。這樣我們可以通過挑選外觀需要的東西來進行定制而不需要擴展和實現(xiàn)任何東西。

javax.swing.plaf包的實現(xiàn)遵循的一個基本原則是使得定制一個外觀盡可能的簡單。這個原則是LookAndFeel類中組件,顏色和UI類的中心。

javax.swing.plaf.basic包以我們希望的方式描繪輕量級Swing組件。如果你是為一臺設備而不是計算機屏幕創(chuàng)建一個外觀,那么最好的方法是從零開始擴展javax.swing.plaf包。

Peter V.Mikhalenko是 Sun公司認證專業(yè)技術(shù)人員,現(xiàn)為Deutsche銀行業(yè)務顧問。

【編輯推薦】

  1. Swing應用的數(shù)據(jù)驗證
  2. 淺談Swing和SWT比較
  3. 應該改進的Java Swing 2.0
  4. 淺析Swing Set示例
  5. Swing中的JFormattedTextField組件實例
責任編輯:佚名 來源: 中國IT實驗室
相關(guān)推薦

2009-07-15 10:37:28

Swing外觀

2009-07-17 16:19:16

Swing核心組件

2009-07-10 15:18:48

Synth外觀Swing外觀

2009-07-15 10:52:13

JTree組件

2009-12-23 17:49:28

WPF觸發(fā)器

2012-05-31 14:11:49

SwingSubstance異常

2012-01-17 17:08:05

JavaSwing

2009-07-14 14:03:56

Swing程序

2012-01-11 09:39:50

Java

2009-07-17 12:54:13

2009-07-10 18:06:59

JTree Swing

2009-07-15 13:06:38

Swing組件

2009-07-10 16:29:32

Swing組件

2009-07-10 17:03:17

AWT組件Swing組件

2009-07-17 14:38:51

輕量級Swing組件

2009-07-14 18:05:28

輕量級Swing組件

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-14 17:21:42

Swing組件

2009-07-15 11:02:32

Swing組件

2009-07-17 14:57:41

SwingWorkerSwing程序
點贊
收藏

51CTO技術(shù)棧公眾號