成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解Swing組件相應外觀

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

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

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

UI委托

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

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

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


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

使用PLAF

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

javax.swing.plaf包有繼承自ComponentUI的抽象類組成,javax.swing.plaf.basic包中的類擴展了這些抽象類用來實現基本的外觀。UI委托集合是所有其它外觀類用作構建自己的外觀的基類?;就庥^不能自己使用因為BasicLookAndFeel是一個抽象類。有三個繼承自BasicLookAndFeel的可插拔式外觀實現:
◆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委托類名稱)。

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

創建一個PLAF

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

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

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

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

Peter V.Mikhalenko是 Sun公司認證專業技術人員,現為Deutsche銀行業務顧問。

【編輯推薦】

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

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觸發器

2012-01-17 17:08:05

JavaSwing

2012-05-31 14:11:49

SwingSubstance異常

2009-07-14 14:03:56

Swing程序

2012-01-11 09:39:50

Java

2009-07-15 13:06:38

Swing組件

2009-07-10 18:06:59

JTree Swing

2009-07-17 12:54:13

2009-07-15 11:02:32

Swing組件

2009-07-14 17:21:42

Swing組件

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-10 16:29:32

Swing組件

2009-07-14 18:05:28

輕量級Swing組件

2009-07-17 14:38:51

輕量級Swing組件

2009-07-10 17:03:17

AWT組件Swing組件

2009-07-09 11:55:17

Swing模型過濾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.亚洲国产精品 | 97精品超碰一区二区三区 | 亚洲区中文字幕 | 理论片87福利理论电影 | 日本在线视频不卡 | 91精品国产乱码久久蜜臀 | 亚洲精品免费在线观看 | 久久久久久久97 | 中文字幕精品一区 | 成人精品久久 | av 一区二区三区 | av网站在线播放 | 黄网站免费在线 | 久草日韩 | 欧美成年网站 | 亚洲国产精品久久久 | 乱一性一乱一交一视频a∨ 色爱av | 精品久久久久久久久久久久久久 | 超碰在线免费av | 久草成人 | 国产欧美日韩综合精品一区二区 | 六月色婷 | 日韩成人在线看 | 精品蜜桃一区二区三区 | 一区二区精品 | 国产精品精品 | 国产无人区一区二区三区 | 精品一区在线 | 国产一区二区三区视频免费观看 | www.国产 | 国产在线一区二区三区 | 亚洲欧美高清 | 精品一区二区三区四区五区 | av在线免费观看网站 | 97人人爱 | 国产欧美在线观看 | 亚洲成人精品一区二区 | 久久91| 午夜影院在线视频 | 国产片淫级awww| 日韩视频免费在线 |