- java.lang.Object
-
- javax.swing.LookAndFeel
-
- 已知直接子类:
-
BasicLookAndFeel
,MultiLookAndFeel
public abstract class LookAndFeel extends Object
LookAndFeel
,顾名思义,封装外观。 除了安装外观,大多数开发人员不需要直接与LookAndFeel
进行交互。 一般来说,创建自定义外观的开发人员只需要关心这个类。Swing建立在每个
JComponent
子类的基础上,具有特定的ComponentUI
子类的实现。ComponentUI
通常被称为“ui”,“ui”或“look-feel delegate”。ComponentUI
子类负责提供组件的外观和特定功能。 例如,JTree
需要实现ComponentUI
子类TreeUI
。 特定ComponentUI
子类的实现由LookAndFeel
提供。 每个JComponent
子类标识ComponentUI
子类,它需要通过JComponent
方法getUIClassID
。每个
LookAndFeel
实现必须通过为从getDefaults
返回的UIDefaults
对象中为每个Swing的ui类标识指定一个值来提供适当的ComponentUI
子类的实现。 例如,BasicLookAndFeel
使用BasicTreeUI
作为具体实施TreeUI
。 这是由BasicLookAndFeel
提供的键值对"TreeUI"-"javax.swing.plaf.basic.BasicTreeUI"
,在UIDefaults
从getDefaults
返回。 有关如何获取ComponentUI
子类的实现的详细信息,请参阅UIDefaults.getUI(JComponent)
。当
LookAndFeel
安装UIManager
不会检查的项存在所有ui类id。 因此,如果当前的外观和感觉没有为特定的ui类id提供值,并且创建JComponent
子类的实例,则会发生随机异常。外观和感觉的建议
如UIManager
每个LookAndFeel
都有机会提供一组分层开发人员和系统默认值的默认值。 一些Swing的组件需要外观和感觉来提供一组特定的默认值。 这些记录在需要特定默认值的类中。ComponentUIs and defaults
所有ComponentUIs
通常需要设置JComponent
上的各种属性,ComponentUI
是提供外观和感觉。 这通常在ComponentUI
安装在JComponent
上时JComponent
。 只有开发人员未设置属性,才能设置属性。 对于非原始值,建议的ComponentUI
仅改变在属性JComponent
如果当前值是null
或实现UIResource
。 如果当前值为null
或实现UIResource
则表示该属性未由开发人员设置,并且ui可以自由更改。 例如,BasicButtonUI.installDefaults
仅改变对字体JButton
如果从返回值button.getFont()
是null
或实现UIResource
。 另一方面,如果button.getFont()
返回一个没有实现UIResource
的non-null
值,那么BasicButtonUI.installDefaults
将不会更改JButton
的字体。对于原始值,例如
opaque
,应该调用方法installProperty
。installProperty
只有在开发人员尚未更改该值时才更改相应的属性。ComponentUI
实现应使用此类提供的各种安装方法,因为它们处理必要的检查并使用推荐的指导原则安装该属性。例外
如果要更改的属性的值为null
或UIResource
则null
提供的所有安装方法LookAndFeel
需要访问默认值。 例如,安装该字体将执行以下操作:JComponent c; Font font = c.getFont(); if (font == null || (font instanceof UIResource)) { c.setFont(UIManager.getFont("fontKey")); }
如果字体为null
或UIResource
,则使用键fontKey
查询默认表。 所有的UIDefault's
获取方法抛出一个NullPointerException
如果通过在null
。 因此,除非另有说明各个不同的安装方法LookAndFeel
掷一个NullPointerException
如果当前值是null
或UIResource
和提供的默认密钥是null
。 另外,除非另有说明,否则所有install
方法都会抛出一个NullPointerException
如果一个null
组件被传入。- 从以下版本开始:
- 1.2
-
-
构造方法摘要
构造方法 Constructor 描述 LookAndFeel()
-
方法摘要
所有方法 静态方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 UIDefaults
getDefaults()
返回外观和默认值。abstract String
getDescription()
返回这个外观的一行描述实现,例如static Object
getDesktopPropertyValue(String systemPropertyName, Object fallbackValue)
通过调用Toolkit.getDefaultToolkit().getDesktopProperty()
返回指定的系统桌面属性的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()
返回一个标识这种外观和感觉的短字符串,例如boolean
getSupportsWindowDecorations()
返回true
如果LookAndFeel
返回的RootPaneUI
实例支持在JRootPane
提供Window
装饰。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)
创建ComponentInputMapUIResource
从keys
。static Object
makeIcon(Class<?> baseClass, String gifFile)
创建并返回加载图像的UIDefault.LazyValue
。static InputMap
makeInputMap(Object[] keys)
创建一个InputMapUIResource
从keys
。static JTextComponent.KeyBinding[]
makeKeyBindings(Object[] keyBindingList)
方便构建KeyBindings
数组的KeyBindings
。void
provideErrorFeedback(Component component)
当用户尝试无效操作时调用,例如粘贴到具有焦点的不可编辑的JTextField
中。String
toString()
返回显示和标识此对象属性的字符串。void
uninitialize()
初始化外观和感觉。static void
uninstallBorder(JComponent c)
方便卸载边框的方法。
-
-
-
方法详细信息
-
installColors
public static void installColors(JComponent c, String defaultBgName, String defaultFgName)
使用默认值设置组件的前景和背景颜色属性的便利方法。 仅当当前值为null
或UIResource
才会设置属性。- 参数
-
c
- 组件设置颜色 -
defaultBgName
- 背景的钥匙 -
defaultFgName
- 前景的键 - 异常
-
NullPointerException
-如上述 exceptions - 另请参见:
-
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)
使用默认值设置组件的前景,背景和字体属性的便利方法。 仅当当前值为null
或UIResource
,属性才会设置。- 参数
-
c
- 组件设置为颜色和字体 -
defaultBgName
- 背景的钥匙 -
defaultFgName
- 前景键 -
defaultFontName
- 字体的键 - 异常
-
NullPointerException
- 如 exceptions所述 - 另请参见:
-
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)
使用默认值设置组件边框属性的便利方法。 边框仅在边框为null
或null
的实例UIResource
。- 参数
-
c
- 组件打开边框 -
defaultBorderName
- 指定边框的键 - 异常
-
NullPointerException
- 如 exceptions所述
-
uninstallBorder
public static void uninstallBorder(JComponent c)
方便卸载边框的方法。 如果组件的边框为UIResource
,则设置为null
。- 参数
-
c
- 卸载边框的组件 - 异常
-
NullPointerException
- 如果c
是null
-
installProperty
public static void installProperty(JComponent c, String propertyName, Object propertyValue)
如果开发人员尚未设置该属性,则在方法上安装具有指定名称和值的属性。 该方法旨在由需要为原始类型(boolean,int,..)的属性指定默认值的ui委托实例使用,但不希望覆盖客户端设置的值。 由于原始属性值不能用UIResource
标记包装,因此此方法使用私有状态来确定属性是否已由客户端设置。- 参数
-
c
- 设置属性的目标组件 -
propertyName
- 要设置的属性的名称 -
propertyValue
- 物业的价值 - 异常
-
IllegalArgumentException
- 如果指定的属性不是可以使用此方法设置的属性 -
ClassCastException
- 如果属性值尚未由开发人员设置,并且类型与属性的类型不匹配 -
NullPointerException
- 如果c
是null
,或者指定的属性尚未被开发者设置,而propertyValue
是null
- 从以下版本开始:
- 1.5
-
makeKeyBindings
public static JTextComponent.KeyBinding[] makeKeyBindings(Object[] keyBindingList)
构建KeyBindings
数组的便利方法。 虽然此方法不被弃用,但开发人员应该使用ActionMap
和InputMap
来提供密钥绑定。此方法返回一个
KeyBindings
的数组,每个交替key-action
对中的一个keyBindingList
。 甲key
可以是一个String
在由指定的格式KeyStroke.getKeyStroke
法或KeyStroke
。 的action
的双部分是String
对应于名称Action
。以下示例说明从六个交替的
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's
,则最后一个元素被忽略。供给
null
为任一值key
或action
的一部分key-action
在创建一对结果KeyBinding
与对应值null
。 Swing的其他地区预计non-null
的值KeyBinding
,应该避免将null
因为无论是key
或者action
的一部分key-action
对。- 参数
-
keyBindingList
- 一组key-action
对 - 结果
-
一个
KeyBindings
的阵列 - 异常
-
NullPointerException
- 如果keyBindingList
是null
-
ClassCastException
- 如果key
一部分对不是KeyStroke
或String
,或action
部分对不是String
- 另请参见:
-
ActionMap
,InputMap
,KeyStroke.getKeyStroke(char)
-
makeInputMap
public static InputMap makeInputMap(Object[] keys)
创建一个InputMapUIResource
从keys
。 这是创建一个新的InputMapUIResource
的方便方法,调用loadKeyBindings(map, keys)
,并返回InputMapUIResource
。- 参数
-
keys
- 交替的keystroke-action key
对,如loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
所述 - 结果
-
新创建和填充
InputMapUIResource
- 从以下版本开始:
- 1.3
- 另请参见:
-
loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
-
makeComponentInputMap
public static ComponentInputMap makeComponentInputMap(JComponent c, Object[] keys)
创建ComponentInputMapUIResource
从keys
。 这是创建一个新的ComponentInputMapUIResource
,调用loadKeyBindings(map, keys)
并返回ComponentInputMapUIResource
的便利方法。- 参数
-
c
- 组件创建ComponentInputMapUIResource
带 -
keys
-交替对keystroke-action key
对作为中所述loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
- 结果
-
新创建和填充
InputMapUIResource
- 异常
-
IllegalArgumentException
- 如果c
是null
- 从以下版本开始:
- 1.3
- 另请参见:
-
loadKeyBindings(javax.swing.InputMap, java.lang.Object[])
,ComponentInputMapUIResource
-
loadKeyBindings
public static void loadKeyBindings(InputMap retMap, Object[] keys)
使用指定的绑定填充InputMap
。 绑定作为交替keystroke-action key
对的列表提供。 所述keystroke
是任一的一个实例KeyStroke
或String
标识KeyStroke
的结合。 具体格式请参考KeyStroke.getKeyStroke(String)
。action key
一部分是InputMap
为KeyStroke
注册的密钥。以下说明如何加载
InputMap
两个key-action
对:LookAndFeel.loadKeyBindings(inputMap, new Object[] { "control X", "cut", "control V", "paste" });
提供
null
绑定列表(keys
)不会以任何方式更改retMap
。指定
null
action key
导致从InputMap
中删除keystroke's
条目。 Anull
keystroke
被忽略。- 参数
-
retMap
-InputMap
加入key-action
对 -
keys
- 绑定添加到retMap
- 异常
-
NullPointerException
- 如果keys
是non-null
,不是空,而retMap
是null
- 从以下版本开始:
- 1.3
- 另请参见:
-
KeyStroke.getKeyStroke(String)
,InputMap
-
makeIcon
public static Object makeIcon(Class<?> baseClass, String gifFile)
创建并返回加载图像的UIDefault.LazyValue
。 返回的值是一个UIDefaults.LazyValue
的实现。 当返回的对象调用createValue
,图像被加载。 如果图像是non-null
时,然后包装在一个Icon
实现UIResource
。 图像使用Class.getResourceAsStream(gifFile)
加载。此方法不会以任何方式检查参数。 强烈建议提供
non-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()
返回指定的系统桌面属性的Toolkit.getDefaultToolkit().getDesktopProperty()
。 如果指定属性的值为null
,则返回fallbackValue
。- 参数
-
systemPropertyName
- 要查询的系统桌面属性的名称 -
fallbackValue
- 如果系统值为null,fallbackValue
返回的对象作为值 - 结果
- 桌面属性的当前值
- 从以下版本开始:
- 1.4
- 另请参见:
-
Toolkit.getDesktopProperty(java.lang.String)
-
getDisabledIcon
public Icon getDisabledIcon(JComponent component, Icon icon)
返回一个禁用外观的Icon
。 当一个没有被指定时,该方法用于生成一个禁用的Icon
。 例如,如果您创建一个JButton
并且仅通过setIcon
指定一个Icon
,setIcon
此方法来生成禁用的Icon
。 如果null
传递为icon
此方法返回null
。有些看起来和感觉可能不会使残疾人
Icon
,在这种情况下他们会忽略这个。- 参数
-
component
-JComponent
会显示Icon
,可能是null
-
icon
-Icon
从中生成禁用的图标 - 结果
-
禁用
Icon
或null
如果无法生成合适的Icon
- 从以下版本开始:
- 1.5
-
getDisabledSelectedIcon
public Icon getDisabledSelectedIcon(JComponent component, Icon icon)
返回一个Icon
供被还被选中的禁用组件使用。 此方法用于为禁用和选定状态的组件生成Icon
,但对于该状态不具有特定的Icon
。 例如,如果您创建一个JButton
并且仅通过setIcon
指定一个Icon
,setIcon
此方法来生成禁用且选定的Icon
。 如果null
通过为icon
此方法返回null
。有些看起来和感觉可能不会渲染残疾人并选择
Icon
,在这种情况下,他们会忽略这一点。- 参数
-
component
-JComponent
会显示Icon
,可能是null
-
icon
-Icon
从中生成禁用和选择的图标 - 结果
-
禁用和选择的图标,或
null
如果无法生成合适的Icon
。 - 从以下版本开始:
- 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()
返回一行描述这种外观和感觉的实现,例如“CDE / Motif Look and Feel”。 此字符串用于用户,例如在窗口的标题或ToolTip消息中。- 结果
- 外观简洁的描述
-
getSupportsWindowDecorations
public boolean getSupportsWindowDecorations()
返回true
如果LookAndFeel
返回RootPaneUI
实例支持在JRootPane
提供Window
装饰。默认实现返回
false
,支持Window
装饰的子类应该覆盖此值并返回true
。- 结果
-
true
如果由这种外观创建的RootPaneUI
实例支持客户端装饰 - 从以下版本开始:
- 1.4
- 另请参见:
-
JDialog.setDefaultLookAndFeelDecorated(boolean)
,JFrame.setDefaultLookAndFeelDecorated(boolean)
,JRootPane.setWindowDecorationStyle(int)
-
isNativeLookAndFeel
public abstract boolean isNativeLookAndFeel()
如果底层平台具有“本机”的外观和感觉,这是一个实现,返回true
。 例如,当底层平台是Solaris运行CDE时,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
public void uninitialize()
初始化外观和感觉。 虽然这种方法是公开的,但是只有当外观和感觉被卸载时才应该由UIManager
调用。 例如,当外观和感觉改变时,UIManager.setLookAndFeel
调用它。子类可以选择在这里释放一些资源。
-
getDefaults
public UIDefaults getDefaults()
返回外观和默认值。 虽然这种方法是公开的,但是只有当外观和感觉被设置为当前的外观并且在initialize
被调用之后才应该由UIManager
调用。- 结果
- 外观和默认值
- 另请参见:
-
initialize()
,uninitialize()
,UIManager.setLookAndFeel(javax.swing.LookAndFeel)
-
-