成人免费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-17 14:57:41

SwingWorkerSwing程序

2009-07-15 11:02:32

Swing組件

2009-07-14 17:21:42

Swing組件

2009-07-17 11:13:46

AWT和SwingSwing組件

2009-07-09 11:55:17

Swing模型過濾

2009-07-10 16:29:32

Swing組件

2009-07-14 18:05:28

輕量級Swing組件

2009-07-10 17:03:17

AWT組件Swing組件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产免费一区二区三区 | 亚洲黄色片免费观看 | 精品国产乱码久久久久久蜜柚 | 日韩久久久久久久久久久 | 538在线精品 | 亚洲人成免费 | 欧美精品久久一区 | 国产麻豆乱码精品一区二区三区 | 国产美女在线看 | 九九九久久国产免费 | av色站| 看羞羞视频 | 一区二区三区在线 | 天堂色网 | 91久久久久久久久久久久久 | 天天草视频 | 色综合久 | 国产精品久久久久一区二区三区 | 日韩免费一区二区 | 国产乱码精品1区2区3区 | 亚洲人在线播放 | 黄视频网站免费观看 | 欧美高清成人 | 毛片免费观看 | 一区二区三区四区在线 | 99亚洲综合 | 在线观看中文字幕一区二区 | 伊人免费视频二 | 国产伦精品一区二区三区四区视频 | 国产精品免费一区二区三区四区 | 毛片一级电影 | 日本三级精品 | 欧美精品一区二区三区在线播放 | 国产精品一区二区福利视频 | 国产精品久久久久久久久污网站 | 国产网站在线播放 | 超碰电影 | 亚洲精品在 | 久久精品电影 | 中文字幕亚洲一区 | 亚洲精品久久国产高清情趣图文 |