|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object javax.swing.LookAndFeel
public abstract class LookAndFeel
顧名思義,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 指定一個值。例如,BasicLookAndFeel
將 BasicTreeUI
用作 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
通常都需要在 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
實作使用推薦指南處理必需的檢查和安裝屬性時,它們應該使用此類別提供的各種安裝方法。
null
或 UIResource
,則 LookAndFeel
提供的所有安裝方法都需要存取預設值。例如,安裝字體執行以下操作:
JComponent c; Font font = c.getFont(); if (font == null || (font instanceof UIResource)) { c.setFont(UIManager.getFont("fontKey")); }如果字體為
null
或 UIResource
,則使用 fontKey
鍵查詢預設表。如果傳入 null
,則所有 UIDefaults
的獲取方法都將拋出 NullPointerException
。因此,如果當前值為 null
或 UIResource
,並且提供的預設鍵為 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 |
建構子詳細資訊 |
---|
public LookAndFeel()
方法詳細資訊 |
---|
public static void installColors(JComponent c, String defaultBgName, String defaultFgName)
null
或 UIResource
時才設置這些屬性。
c
- 要設置顏色的元件defaultBgName
- 背景的鍵defaultFgName
- 前景的鍵
NullPointerException
- 如異常中所述installColorsAndFont(javax.swing.JComponent, java.lang.String, java.lang.String, java.lang.String)
,
UIManager.getColor(java.lang.Object)
public static void installColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)
null
或 UIResource
時才設置這些屬性。
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)
public static void installBorder(JComponent c, String defaultBorderName)
null
或 UIResource
的實例時才設置該邊框。
c
- 要設置邊框的元件defaultBorderName
- 指定該邊框的鍵
NullPointerException
- 如異常中所述public static void uninstallBorder(JComponent c)
UIResource
,則將它設置為 null
。
c
- 要卸載邊框的元件
NullPointerException
- 如果 c
為 null
public static void installProperty(JComponent c, String propertyName, Object propertyValue)
UIResource
標記來包裹,此方法使用私有狀態來確定屬性是否已由客戶端設置。
c
- 要設置屬性的目標元件propertyName
- 要設置的屬性的名稱propertyValue
- 屬性的值
IllegalArgumentException
- 如果指定的屬性不是可以使用此方法設置的屬性
ClassCastException
- 如果屬性值尚未由開發人員設置並且型別與屬性的型別不比對
NullPointerException
- 如果 c
為 null
,或者指定屬性尚未由開發人員設置並且 propertyValue
為 null
public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
KeyBinding
陣列的便捷方法。儘管此方法沒有過時,但開發人員應該使用 ActionMap
和 InputMap
來提供鍵綁定。
此方法返回一個 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
對的 key
或 action
部分提供一個 null
值將導致創建一個 KeyBinding
,其對應值為 null
。作為 KeyBinding
中 Swing 的期望非 null
值的其他部分,應該避免將 null
作為 key-action
對的 key
或 action
部分提供。
keyBindingList
- key-action
對陣列
KeyBinding
陣列
NullPointerException
- 如果 keyBindingList
為 null
ClassCastException
- 如果該對的 key
部分不是 KeyStroke
或 String
,或者該對的 action
部分不是 String
ActionMap
,
InputMap
,
KeyStroke.getKeyStroke(char)
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
loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
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
- 如果 c
為 null
loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
,
ComponentInputMapUIResource
public static void loadKeyBindings(InputMap retMap, Object[] keys)
InputMap
。該綁定作為一個交替 keystroke-action key
對的列表提供。keystroke
是 KeyStroke
的實例,或者是標識該綁定的 KeyStroke
的 String
。有關特定格式,請參閱 KeyStroke.getKeyStroke(String)
。該對的 action key
部分是為 KeyStroke
在 InputMap
中註冊的鍵。
以下程式碼演示了如何使用兩個 key-action
對來載入 InputMap
:
LookAndFeel.loadKeyBindings(inputMap, new Object[] { "control X", "cut", "control V", "paste" });
提供一個綁定 keys
的 null
列表不會以任何方式更改 retMap
。
指定一個為 null
的 action key
將導致從 InputMap
中移除 keystroke
的項。忽略為 null
的 keystroke
。
retMap
- 要添加 key-action
對的 InputMap
keys
- 要添加到 retMap
的綁定
NullPointerException
- 如果 keys
為非 null
,不為空,並且 retMap
為 null
KeyStroke.getKeyStroke(String)
,
InputMap
public static Object makeIcon(Class<?> baseClass, String gifFile)
UIDefault.LazyValue
。返回值是 UIDefaults.LazyValue
的實作。當在返回物件上調用 createValue
時載入圖像。如果圖像為非 null
,則它包裹在一個實作 UIResource
的 Icon
中。使用 Class.getResourceAsStream(gifFile)
載入圖像。
此方法不會以任何方式檢查參數。建議最好提供非 null
值,否則在返回物件上調用 createValue
時可能發生異常。
baseClass
- 用於載入資源的 Class
gifFile
- 要載入的圖像的路徑
UIDefaults.LazyValue
;該值被解析時 LazyValue
載入指定的圖像UIDefaults.LazyValue
,
Icon
,
Class.getResourceAsStream(String)
public LayoutStyle getLayoutStyle()
LayoutStyle
。此方法永遠不會返回 null
。
通常不使用外觀的 LayoutStyle
,而使用 LayoutStyle
方法 getInstance
。
LayoutStyle
LayoutStyle.getInstance()
public void provideErrorFeedback(Component component)
JTextField
中進行粘貼。預設實作蜂鳴。期待不同行為的子類別應覆寫它,並提供其他的反饋。
component
- 其中發生錯誤的 Component
,可以為 null
,指示錯誤條件與某個 Component
並無直接關聯public static Object getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
Toolkit.getDefaultToolkit().getDesktopProperty()
返回指定系統桌面屬性的值。如果指定屬性的值為 null
,則返回 fallbackValue
。
systemPropertyName
- 正被查詢的系統桌面屬性的名稱fallbackValue
- 在系統值為 null 時,要作為值返回的物件
Toolkit.getDesktopProperty(java.lang.String)
public Icon getDisabledIcon(JComponent component, Icon icon)
Icon
。此方法用於在未指定圖標時產生被禁用的 Icon
。例如,如果創建了一個 JButton
,並通過 setIcon
僅指定了一個 Icon
,則會調用此方法來產生被禁用的 Icon
。如果 null
作為 icon
傳遞,則此方法將返回 null
。
有些外觀可能不呈現被禁用的 Icon
,在此情況下這些外觀將忽略它。
component
- 將顯示 Icon
的 JComponent
,可以為 null
icon
- 從其產生禁用圖標的 Icon
Icon
;如果無法產生合適的 Icon
,則返回 null
public Icon getDisabledSelectedIcon(JComponent component, Icon icon)
Icon
。此方法用於為以下情況的元件產生一個 Icon
:這些元件均為禁用和選中狀態,但沒有此狀態的指定 Icon
。例如,如果創建了一個 JButton
,並通過 setIcon
僅指定了一個 Icon
,則會調用此方法來產生禁用和選中的 Icon
。如果 null
作為 icon
傳遞,則此方法將返回 null
。
有些外觀可能不呈現禁用和選中的 Icon
,在此情況下這些外觀將忽略它。
component
- 將顯示 Icon
的 JComponent
,可以為 null
icon
- 從其產生禁用和選中圖標的 Icon
Icon
,則返回 null
public abstract String getName()
public abstract String getID()
public abstract String getDescription()
public boolean getSupportsWindowDecorations()
LookAndFeel
返回的 RootPaneUI
實例支持 JRootPane
中提供 Window
裝飾,則返回 true
。
預設實作返回 false
,支持 Window
裝飾的子類別應覆寫它並返回 true
。
RootPaneUI
實例支持客戶端裝飾,則返回 true
JDialog.setDefaultLookAndFeelDecorated(boolean)
,
JFrame.setDefaultLookAndFeelDecorated(boolean)
,
JRootPane.setWindowDecorationStyle(int)
public abstract boolean isNativeLookAndFeel()
true
。例如,在底層平臺為運行 CDE 的 Solaris 時,CDE/Motif 的外觀實作將返回 true
。
true
public abstract boolean isSupportedLookAndFeel()
true
。如果外觀取決於特定資源或未為當前平臺定義合法協議,則此方法返回 false
。
true
UIManager.setLookAndFeel(javax.swing.LookAndFeel)
public void initialize()
UIManager
調用。在 UIManager
調用 getDefaults
之前調用此方法。此方法用於執行外觀的任何初始化。子類別應該用此方法而不是靜態初始化程序來執行它們需要的任何一次設置,因為也可能只是為了發現 isSupportedLookAndFeel()
返回 false
而載入外觀類別物件。
uninitialize()
,
UIManager.setLookAndFeel(javax.swing.LookAndFeel)
public void uninitialize()
UIManager
調用。例如,外觀更改時 UIManager.setLookAndFeel
調用此方法。
子類別在此處可以選擇釋放一些資源。
initialize()
,
UIManager.setLookAndFeel(javax.swing.LookAndFeel)
public UIDefaults getDefaults()
initialize
後,外觀作為當前外觀設置時才能由 UIManager
調用。
initialize()
,
uninitialize()
,
UIManager.setLookAndFeel(javax.swing.LookAndFeel)
public String toString()
Object
中的 toString
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。