|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
| 上一個類別 下一個類別 | 框架 無框架 | |||||||||
| 摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 | |||||||||
java.lang.Objectjavax.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 為 nullpublic 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 部分不是 StringActionMap,
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 對的交替對
InputMapUIResourceloadKeyBindings(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 為 nullloadKeyBindings(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 對的 InputMapkeys - 要添加到 retMap 的綁定
NullPointerException - 如果 keys 為非 null,不為空,並且 retMap 為 nullKeyStroke.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 - 用於載入資源的 ClassgifFile - 要載入的圖像的路徑
UIDefaults.LazyValue;該值被解析時 LazyValue 載入指定的圖像UIDefaults.LazyValue,
Icon,
Class.getResourceAsStream(String)public LayoutStyle getLayoutStyle()
LayoutStyle。此方法永遠不會返回 null。
通常不使用外觀的 LayoutStyle,而使用 LayoutStyle 方法 getInstance。
LayoutStyleLayoutStyle.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,可以為 nullicon - 從其產生禁用圖標的 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,可以為 nullicon - 從其產生禁用和選中圖標的 Icon
Icon,則返回 nullpublic abstract String getName()
public abstract String getID()
public abstract String getDescription()
public boolean getSupportsWindowDecorations()
LookAndFeel 返回的 RootPaneUI 實例支持 JRootPane 中提供 Window 裝飾,則返回 true。
預設實作返回 false,支持 Window 裝飾的子類別應覆寫它並返回 true。
RootPaneUI 實例支持客戶端裝飾,則返回 trueJDialog.setDefaultLookAndFeelDecorated(boolean),
JFrame.setDefaultLookAndFeelDecorated(boolean),
JRootPane.setWindowDecorationStyle(int)public abstract boolean isNativeLookAndFeel()
true。例如,在底層平臺為運行 CDE 的 Solaris 時,CDE/Motif 的外觀實作將返回 true。
truepublic abstract boolean isSupportedLookAndFeel()
true。如果外觀取決於特定資源或未為當前平臺定義合法協議,則此方法返回 false。
trueUIManager.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。