JavaTM 2 Platform
Standard Ed. 6

javax.swing
類別 LookAndFeel

java.lang.Object
  繼承者 javax.swing.LookAndFeel
直接已知子類別:
BasicLookAndFeel, MultiLookAndFeel

public abstract class LookAndFeel
extends Object

顧名思義,LookAndFeel 封裝了一個外觀。除了安裝外觀之外,大多數開發人員無需直接與 LookAndFeel 進行交互。通常,只有創建自定義外觀的開發人員才需要涉及此類別。

Swing 建構的基礎是每個 JComponent 子類別都具有特定 ComponentUI 子類別的實作。ComponentUI 通常被稱為「ui」、「元件 ui」或「外觀委託」。ComponentUI 子類別負責提供元件特定於外觀的功能。例如,JTree 需要 ComponentUI 子類別 TreeUI 的實作。特定 ComponentUI 子類別的實作由 LookAndFeel 提供。通過 JComponent 方法 getUIClassID,每個 JComponent 子類別可標識所需的 ComponentUI 子類別。

每個 LookAndFeel 實作必須提供適當 ComponentUI 子類別的實作,方法是為 getDefaults 所返回的 UIDefaults 物件中每個 Swing 的 ui 類別 id 指定一個值。例如,BasicLookAndFeelBasicTreeUI 用作 TreeUI 的具體實作。這是通過提供鍵-值對 "TreeUI"-"javax.swing.plaf.basic.BasicTreeUI"BasicLookAndFeel 完成的,該鍵-值對在 getDefaults 所返回的 UIDefaults 中。有關如何獲得 ComponentUI 子類別實作的詳細資訊,請參閱 UIDefaults.getUI(JComponent)

當安裝了一個 LookAndFeel 時,UIManager 不會檢查是否存在所有 ui 類別 id 的項。因此,如果當前外觀尚未為特定 ui 類別 id 提供一個值,並且創建了 JComponent 子類別的實例,則會發生隨機異常。

對外觀的建議

正如 UIManager 中說明的,每個 LookAndFeel 都有機會提供一個預設值(該值按開發人員和系統預設值分層)的集合。Swing 的某些元件要求外觀提供預設值的特定集合。這些在要求特定預設值的類別中有記錄。

ComponentUI 和預設值

所有 ComponentUI 通常都需要在 JComponent 上設置各種屬性,ComponentUI 為其提供外觀。這通常在 JComponent 上安裝了 ComponentUI 時執行。只有在開發人員尚未設置屬性時,才應該設置該屬性。對於非基本值,只有當前值為 null 或實作 UIResource 時,才建議 ComponentUI 更改 JComponent 上的屬性。如果當前值為 null 或實作 UIResource,則它指示開發人員尚未設置該屬性,ui 可以隨意更改它。例如,只有從 button.getFont() 返回的值為 null 或實作 UIResource 時,BasicButtonUI.installDefaults 才更改 JButton 的字體。另一方面,如果 button.getFont() 返回一個未實作 UIResource非 null 值,則 BasicButtonUI.installDefaults 將不會更改 JButton 的字體。

對於基本值(如 opaque),應該調用 installProperty 方法。只有在開發人員尚未更改該值時,installProperty 才更改對應屬性。

ComponentUI 實作使用推薦指南處理必需的檢查和安裝屬性時,它們應該使用此類別提供的各種安裝方法。

異常

如果要更改的屬性值為 nullUIResource,則 LookAndFeel 提供的所有安裝方法都需要存取預設值。例如,安裝字體執行以下操作:
   JComponent c;
   Font font = c.getFont();
   if (font == null || (font instanceof UIResource)) {
       c.setFont(UIManager.getFont("fontKey"));
   }
 
如果字體為 nullUIResource,則使用 fontKey 鍵查詢預設表。如果傳入 null,則所有 UIDefaults 的獲取方法都將拋出 NullPointerException。因此,如果當前值為 nullUIResource,並且提供的預設鍵為 null,那麼除非另行說明,否則 LookAndFeel 的每個安裝方法都將拋出 NullPointerException。此外,如果傳入一個 null 元件,那麼除非另行指定,否則所有 install 方法都將拋出 NullPointerException


建構子摘要
LookAndFeel()
           
 
方法摘要
 UIDefaults getDefaults()
          返回外觀的預設值。
abstract  String getDescription()
          返回對此外觀實作的單行描述,例如,"The CDE/Motif Look and Feel"。
static Object getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
          通過調用 Toolkit.getDefaultToolkit().getDesktopProperty() 返回指定系統桌面屬性的值。
 Icon getDisabledIcon(JComponent component, Icon icon)
          返回具有禁用外觀的 Icon
 Icon getDisabledSelectedIcon(JComponent component, Icon icon)
          返回由選定的禁用元件使用的 Icon
abstract  String getID()
          返回標識此外觀的字元串。
 LayoutStyle getLayoutStyle()
          返回此外觀的 LayoutStyle
abstract  String getName()
          返回標識此外觀的短字元串,例如 "CDE/Motif"。
 boolean getSupportsWindowDecorations()
          如果 LookAndFeel 返回的 RootPaneUI 實例支持 JRootPane 中提供 Window 裝飾,則返回 true
 void initialize()
          初始化外觀。
static void installBorder(JComponent c, String defaultBorderName)
          使用預設的值設置元件邊框屬性的便捷方法。
static void installColors(JComponent c, String defaultBgName, String defaultFgName)
          使用預設的值設置元件的前景和背景顏色屬性的便捷方法。
static void installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)
          使用預設的值設置元件的前景、背景和字體屬性的便捷方法。
static void installProperty(JComponent c, String propertyName, Object propertyValue)
          在元件上安裝具有指定名稱和值的屬性的便捷方法,條件是該屬性尚未由開發人員設置。
abstract  boolean isNativeLookAndFeel()
          如果底層平臺具有“本機”外觀,而且這是對它的一個實作,則返回 true
abstract  boolean isSupportedLookAndFeel()
          如果底層平臺支持和/或允許此外觀,則返回 true
static void loadKeyBindings(InputMap retMap, Object[] keys)
          使用指定綁定填充 InputMap
static ComponentInputMap makeComponentInputMap(JComponent c, Object[] keys)
          根據 keys 創建一個 ComponentInputMapUIResource
static Object makeIcon(Class<?> baseClass, String gifFile)
          創建並返回一個載入圖像的 UIDefault.LazyValue
static InputMap makeInputMap(Object[] keys)
          根據 keys 創建一個 InputMapUIResource
static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
          建構一個 KeyBinding 陣列的便捷方法。
 void provideErrorFeedback(Component component)
          在使用者嘗試一個無效操作時調用,例如,在具有焦點的不可編輯的 JTextField 中進行粘貼。
 String toString()
          返回顯示和標識此物件屬性的字元串。
 void uninitialize()
          取消初始化外觀。
static void uninstallBorder(JComponent c)
          卸載邊框的便捷方法。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

LookAndFeel

public LookAndFeel()
方法詳細資訊

installColors

public static void installColors(JComponent c,
                                 String defaultBgName,
                                 String defaultFgName)
使用預設的值設置元件的前景和背景顏色屬性的便捷方法。只有在當前值為 nullUIResource 時才設置這些屬性。

參數:
c - 要設置顏色的元件
defaultBgName - 背景的鍵
defaultFgName - 前景的鍵
拋出:
NullPointerException - 如異常中所述
另請參見:
installColorsAndFont(javax.swing.JComponent, java.lang.String, java.lang.String, java.lang.String), UIManager.getColor(java.lang.Object)

installColorsAndFont

public static void installColorsAndFont(JComponent c,
                                        String defaultBgName,
                                        String defaultFgName,
                                        String defaultFontName)
使用預設的值設置元件的前景、背景和字體屬性的便捷方法。只有在當前值為 nullUIResource 時才設置這些屬性。

參數:
c - 要設置顏色和字體的元件
defaultBgName - 背景的鍵
defaultFgName - 前景的鍵
defaultFontName - 字體的鍵
拋出:
NullPointerException - 如異常中所述
另請參見:
installColors(javax.swing.JComponent, java.lang.String, java.lang.String), UIManager.getColor(java.lang.Object), UIManager.getFont(java.lang.Object)

installBorder

public static void installBorder(JComponent c,
                                 String defaultBorderName)
使用預設的值設置元件邊框屬性的便捷方法。只有在邊框為 nullUIResource 的實例時才設置該邊框。

參數:
c - 要設置邊框的元件
defaultBorderName - 指定該邊框的鍵
拋出:
NullPointerException - 如異常中所述

uninstallBorder

public static void uninstallBorder(JComponent c)
卸載邊框的便捷方法。如果該元件的邊框是一個 UIResource,則將它設置為 null

參數:
c - 要卸載邊框的元件
拋出:
NullPointerException - 如果 cnull

installProperty

public static void installProperty(JComponent c,
                                   String propertyName,
                                   Object propertyValue)
在元件上安裝具有指定名稱和值的屬性的便捷方法,條件是該屬性尚未由開發人員設置。此方法供 ui 委託實例使用,該實例需要為基本型別 (boolean, int, ..) 的屬性指定一個預設值,但不希望覆寫由客戶端設置的值。由於基本屬性值無法使用 UIResource 標記來包裹,此方法使用私有狀態來確定屬性是否已由客戶端設置。

參數:
c - 要設置屬性的目標元件
propertyName - 要設置的屬性的名稱
propertyValue - 屬性的值
拋出:
IllegalArgumentException - 如果指定的屬性不是可以使用此方法設置的屬性
ClassCastException - 如果屬性值尚未由開發人員設置並且型別與屬性的型別不比對
NullPointerException - 如果 cnull,或者指定屬性尚未由開發人員設置並且 propertyValuenull
從以下版本開始:
1.5

makeKeyBindings

public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
建構一個 KeyBinding 陣列的便捷方法。儘管此方法沒有過時,但開發人員應該使用 ActionMapInputMap 來提供鍵綁定。

此方法返回一個 KeyBinding 陣列,其中的每個元素都是 keyBindingList 中一個交替 key-action 對。key 可以是由 KeyStroke.getKeyStroke 方法指定格式的 String,或者是一個 KeyStroke。該對的 action 部分是對應於 Action 名稱的 String

以下範例演示了如何根據六個交替 key-action 對創建一個 KeyBinding 陣列:

        JTextComponent.KeyBinding[] multilineBindings = makeKeyBindings( new Object[] {
          "UP", DefaultEditorKit.upAction,
        "DOWN", DefaultEditorKit.downAction,
     "PAGE_UP", DefaultEditorKit.pageUpAction,
   "PAGE_DOWN", DefaultEditorKit.pageDownAction,
       "ENTER", DefaultEditorKit.insertBreakAction,
         "TAB", DefaultEditorKit.insertTabAction
  });
 
如果 keyBindingList 的長度為奇數,則忽略最後一個元素。

key-action 對的 keyaction 部分提供一個 null 值將導致創建一個 KeyBinding,其對應值為 null。作為 KeyBinding 中 Swing 的期望非 null 值的其他部分,應該避免將 null 作為 key-action 對的 keyaction 部分提供。

參數:
keyBindingList - key-action 對陣列
返回:
KeyBinding 陣列
拋出:
NullPointerException - 如果 keyBindingListnull
ClassCastException - 如果該對的 key 部分不是 KeyStrokeString,或者該對的 action 部分不是 String
另請參見:
ActionMap, InputMap, KeyStroke.getKeyStroke(char)

makeInputMap

public static InputMap makeInputMap(Object[] keys)
根據 keys 創建一個 InputMapUIResource。這是創建新 InputMapUIResource、調用 loadKeyBindings(map, keys) 並返回 InputMapUIResource 的一個便捷方法。

參數:
keys - loadKeyBindings(javax.swing.InputMap, java.lang.Object[]) 中所述的 keystroke-action key 對的交替對
返回:
新創建並填充的 InputMapUIResource
從以下版本開始:
1.3
另請參見:
loadKeyBindings(javax.swing.InputMap, java.lang.Object[])

makeComponentInputMap

public static ComponentInputMap makeComponentInputMap(JComponent c,
                                                      Object[] keys)
根據 keys 創建一個 ComponentInputMapUIResource。這是創建新 ComponentInputMapUIResource、調用 loadKeyBindings(map, keys) 並返回 ComponentInputMapUIResource 的一個便捷方法。

參數:
c - 要用來創建 ComponentInputMapUIResource 的元件
keys - loadKeyBindings(javax.swing.InputMap, java.lang.Object[]) 中所述的 keystroke-action key 對的交替對
返回:
新創建並填充的 InputMapUIResource
拋出:
IllegalArgumentException - 如果 cnull
從以下版本開始:
1.3
另請參見:
loadKeyBindings(javax.swing.InputMap, java.lang.Object[]), ComponentInputMapUIResource

loadKeyBindings

public static void loadKeyBindings(InputMap retMap,
                                   Object[] keys)
使用指定綁定填充 InputMap。該綁定作為一個交替 keystroke-action key 對的列表提供。keystrokeKeyStroke 的實例,或者是標識該綁定的 KeyStrokeString。有關特定格式,請參閱 KeyStroke.getKeyStroke(String)。該對的 action key 部分是為 KeyStrokeInputMap 中註冊的鍵。

以下程式碼演示了如何使用兩個 key-action 對來載入 InputMap

   LookAndFeel.loadKeyBindings(inputMap, new Object[] {
     "control X", "cut",
     "control V", "paste"
   });
 

提供一個綁定 keysnull 列表不會以任何方式更改 retMap

指定一個為 nullaction key 將導致從 InputMap 中移除 keystroke 的項。忽略為 nullkeystroke

參數:
retMap - 要添加 key-action 對的 InputMap
keys - 要添加到 retMap 的綁定
拋出:
NullPointerException - 如果 keys非 null,不為空,並且 retMapnull
從以下版本開始:
1.3
另請參見:
KeyStroke.getKeyStroke(String), InputMap

makeIcon

public static Object makeIcon(Class<?> baseClass,
                              String gifFile)
創建並返回一個載入圖像的 UIDefault.LazyValue。返回值是 UIDefaults.LazyValue 的實作。當在返回物件上調用 createValue 時載入圖像。如果圖像為非 null,則它包裹在一個實作 UIResourceIcon 中。使用 Class.getResourceAsStream(gifFile) 載入圖像。

此方法不會以任何方式檢查參數。建議最好提供非 null 值,否則在返回物件上調用 createValue 時可能發生異常。

參數:
baseClass - 用於載入資源的 Class
gifFile - 要載入的圖像的路徑
返回:
一個 UIDefaults.LazyValue;該值被解析時 LazyValue 載入指定的圖像
另請參見:
UIDefaults.LazyValue, Icon, Class.getResourceAsStream(String)

getLayoutStyle

public LayoutStyle getLayoutStyle()
返回此外觀的 LayoutStyle。此方法永遠不會返回 null

通常不使用外觀的 LayoutStyle,而使用 LayoutStyle 方法 getInstance

返回:
此外觀的 LayoutStyle
從以下版本開始:
1.6
另請參見:
LayoutStyle.getInstance()

provideErrorFeedback

public void provideErrorFeedback(Component component)
在使用者嘗試一個無效操作時調用,例如,在具有焦點的不可編輯的 JTextField 中進行粘貼。預設實作蜂鳴。期待不同行為的子類別應覆寫它,並提供其他的反饋。

參數:
component - 其中發生錯誤的 Component,可以為 null,指示錯誤條件與某個 Component 並無直接關聯
從以下版本開始:
1.4

getDesktopPropertyValue

public static Object getDesktopPropertyValue(String systemPropertyName,
                                             Object fallbackValue)
通過調用 Toolkit.getDefaultToolkit().getDesktopProperty() 返回指定系統桌面屬性的值。如果指定屬性的值為 null,則返回 fallbackValue

參數:
systemPropertyName - 正被查詢的系統桌面屬性的名稱
fallbackValue - 在系統值為 null 時,要作為值返回的物件
返回:
桌面屬性的當前值
從以下版本開始:
1.4
另請參見:
Toolkit.getDesktopProperty(java.lang.String)

getDisabledIcon

public Icon getDisabledIcon(JComponent component,
                            Icon icon)
返回具有禁用外觀的 Icon。此方法用於在未指定圖標時產生被禁用的 Icon。例如,如果創建了一個 JButton,並通過 setIcon 僅指定了一個 Icon,則會調用此方法來產生被禁用的 Icon。如果 null 作為 icon 傳遞,則此方法將返回 null

有些外觀可能不呈現被禁用的 Icon,在此情況下這些外觀將忽略它。

參數:
component - 將顯示 IconJComponent,可以為 null
icon - 從其產生禁用圖標的 Icon
返回:
禁用 Icon;如果無法產生合適的 Icon,則返回 null
從以下版本開始:
1.5

getDisabledSelectedIcon

public Icon getDisabledSelectedIcon(JComponent component,
                                    Icon icon)
返回由選定的禁用元件使用的 Icon。此方法用於為以下情況的元件產生一個 Icon:這些元件均為禁用和選中狀態,但沒有此狀態的指定 Icon。例如,如果創建了一個 JButton,並通過 setIcon 僅指定了一個 Icon,則會調用此方法來產生禁用和選中的 Icon。如果 null 作為 icon 傳遞,則此方法將返回 null

有些外觀可能不呈現禁用和選中的 Icon,在此情況下這些外觀將忽略它。

參數:
component - 將顯示 IconJComponent,可以為 null
icon - 從其產生禁用和選中圖標的 Icon
返回:
禁用和選中的圖標,如果無法產生合適的 Icon,則返回 null
從以下版本開始:
1.5

getName

public abstract String getName()
返回標識此外觀的短字元串,例如 "CDE/Motif"。此字元串應適合於選單項。不同的外觀應具有不同的名稱,例如,更改某些元件呈現方式的 MotifLookAndFeel 的子類別應稱為 "CDE/Motif My Way";這對從名稱列表中選擇 L&F 的使用者非常有用。

返回:
該外觀的短標識符

getID

public abstract String getID()
返回標識此外觀的字元串。此字元串將由希望識別熟知的外觀實作的應用程序/服務使用。目前熟知的的名稱有“Motif”、“Windows”、“Mac”和“Metal”。注意,由未對外觀進行任何基本更改的熟知的父級類別派生的 LookAndFeel 不應覆寫此方法。

返回:
該外觀的標識符

getDescription

public abstract String getDescription()
返回對此外觀實作的單行描述,例如,"The CDE/Motif Look and Feel"。此字元串供使用者使用,例如,在視窗的標題中或在 ToolTip 訊息中使用。

返回:
該外觀的簡短描述

getSupportsWindowDecorations

public boolean getSupportsWindowDecorations()
如果 LookAndFeel 返回的 RootPaneUI 實例支持 JRootPane 中提供 Window 裝飾,則返回 true

預設實作返回 false,支持 Window 裝飾的子類別應覆寫它並返回 true

返回:
如果此外觀創建的 RootPaneUI 實例支持客戶端裝飾,則返回 true
從以下版本開始:
1.4
另請參見:
JDialog.setDefaultLookAndFeelDecorated(boolean), JFrame.setDefaultLookAndFeelDecorated(boolean), JRootPane.setWindowDecorationStyle(int)

isNativeLookAndFeel

public abstract boolean isNativeLookAndFeel()
如果底層平臺具有“本機”外觀,而且這是對它的一個實作,則返回 true。例如,在底層平臺為運行 CDE 的 Solaris 時,CDE/Motif 的外觀實作將返回 true

返回:
如果此外觀表示底層平臺的外觀,則返回 true

isSupportedLookAndFeel

public abstract boolean isSupportedLookAndFeel()
如果底層平臺支持和/或允許此外觀,則返回 true。如果外觀取決於特定資源或未為當前平臺定義合法協議,則此方法返回 false

返回:
如果這是一個受支持的外觀,則返回 true
另請參見:
UIManager.setLookAndFeel(javax.swing.LookAndFeel)

initialize

public void initialize()
初始化外觀。儘管此方法是公共的,但只有在外觀作為當前外觀安裝時才能由 UIManager 調用。在 UIManager 調用 getDefaults 之前調用此方法。此方法用於執行外觀的任何初始化。子類別應該用此方法而不是靜態初始化程序來執行它們需要的任何一次設置,因為也可能只是為了發現 isSupportedLookAndFeel() 返回 false 而載入外觀類別物件。

另請參見:
uninitialize(), UIManager.setLookAndFeel(javax.swing.LookAndFeel)

uninitialize

public void uninitialize()
取消初始化外觀。儘管此方法是公共的,但只有在卸載外觀時才能由 UIManager 調用。例如,外觀更改時 UIManager.setLookAndFeel 調用此方法。

子類別在此處可以選擇釋放一些資源。

另請參見:
initialize(), UIManager.setLookAndFeel(javax.swing.LookAndFeel)

getDefaults

public UIDefaults getDefaults()
返回外觀的預設值。儘管此方法是公共的,但只有在調用 initialize 後,外觀作為當前外觀設置時才能由 UIManager 調用。

返回:
外觀預設值
另請參見:
initialize(), uninitialize(), UIManager.setLookAndFeel(javax.swing.LookAndFeel)

toString

public String toString()
返回顯示和標識此物件屬性的字元串。

覆寫:
類別 Object 中的 toString
返回:
此物件的 String 表示形式

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only