- java.lang.Object
-
- javax.swing.LookAndFeel
-
- 已知直接子类:
-
BasicLookAndFeel
,MultiLookAndFeel
public abstract class LookAndFeelextends Object
LookAndFeel
,LookAndFeel
封装了外观。 除了安装外观,大多数开发人员都不需要直接与LookAndFeel
进行交互。 通常,只有创建自定义外观的开发人员才需要关注此类。Swing建立在每个
JComponent
子类具有特定ComponentUI
子类的实现的基础之上。ComponentUI
通常被称为“ui”,“组件ui”或“外观代表”。ComponentUI
子类负责提供组件的外观特定功能。 例如,JTree
需要实现ComponentUI
子类TreeUI
。ComponentUI
子类的实现由LookAndFeel
提供。 每个JComponent
子类通过JComponent
方法getUIClassID
识别它所需的ComponentUI
子类。每个
LookAndFeel
实现必须通过为从getDefaults
返回的UIDefaults
对象中的每个Swing的ui类id指定一个值来提供相应的ComponentUI
子类的实现。 例如,BasicLookAndFeel
使用BasicTreeUI
作为具体实施TreeUI
。 这是通过BasicLookAndFeel
实现的,BasicLookAndFeel
提供了"TreeUI"-"javax.swing.plaf.basic.BasicTreeUI"
,其中UIDefaults
从getDefaults
返回的getDefaults
。 有关如何获得ComponentUI
子类的实现的详细信息,请参阅UIDefaults.getUI(JComponent)
。当
LookAndFeel
安装UIManager
不会检查的项存在所有ui类id。 因此,如果当前外观没有为特定的ui类id提供值并且创建了一个JComponent
子类的实例,则会发生随机异常。外观和感觉的建议
如UIManager
每个LookAndFeel
都有机会提供一组与开发人员和系统默认值分层的默认值。 一些Swing的组件需要外观以提供一组特定的默认值。 这些记录在需要特定默认值的类中。ComponentUIs and defaults
所有ComponentUIs
通常需要在JComponent
上设置各种属性ComponentUI
提供的外观和感觉。 这通常在ComponentUI
上安装JComponent
。 只有在开发人员未设置属性时才应设置属性。 对于非原始值,建议ComponentUI
仅更改JComponent
上的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
。 此外,除非另有说明,否则如果null
组件,则所有install
方法都会抛出NullPointerException
。- 从以下版本开始:
- 1.2
-
-
构造方法摘要
构造方法 构造器 描述 LookAndFeel()
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 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
实例支持提供Window
在装饰JRootPane
。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(类<?> baseClass, String gifFile)
创建并返回加载图像的UIDefault.LazyValue
。static InputMap
makeInputMap(Object[] keys)
创建一个InputMapUIResource
从keys
。static JTextComponent.KeyBinding[]
makeKeyBindings(Object[] keyBindingList)
构建数组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
或实例为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)
如果开发人员尚未设置该属性,则在组件上安装具有指定名称和值的属性的便捷方法。 此方法旨在由ui委托实例使用,这些实例需要为基本类型(boolean,int,..)的属性指定默认值,但不希望覆盖客户端设置的值。 由于原始属性值无法用UIResource
标记包装,因此此方法使用私有状态来确定该属性是否已由客户端设置。- 参数
-
c
- 要在其上设置属性的目标组件 -
propertyName
- 要设置的属性的名称 -
propertyValue
- 该物业的价值 - 异常
-
IllegalArgumentException
- 如果指定的属性不是可以使用此方法设置的属性 -
ClassCastException
- 如果开发人员尚未设置属性值且类型与属性的类型不匹配 -
NullPointerException
- 如果c
是null
,或者开发人员未设置named属性,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
长度为奇数,则忽略最后一个元素。为
key
或action
部分提供null
值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
对的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(类<?> baseClass, String gifFile)
创建并返回加载图像的UIDefault.LazyValue
。 返回的值是UIDefaults.LazyValue
的实现。 在返回的对象上调用createValue
,将加载该图像。 如果图像是non-null
,它然后被包裹在一个Icon
实现UIResource
。 使用Class.getResourceAsStream(gifFile)
加载图像。此方法不以任何方式检查参数。 强烈建议提供
non-null
值,否则在返回的对象上调用createValue
时可能会发生异常。- 参数
-
baseClass
-类
用于加载资源 -
gifFile
- 要加载的映像的路径 - 结果
- a
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,则作为值返回的对象 - 结果
- 桌面属性的当前值
- 从以下版本开始:
- 1.4
- 另请参见:
-
Toolkit.getDesktopProperty(java.lang.String)
-
getDisabledIcon
public Icon getDisabledIcon(JComponent component, Icon icon)
返回具有禁用外观的Icon
。 如果尚未指定,则此方法用于生成禁用的Icon
。 例如,如果您创建JButton
并仅通过setIcon
指定Icon
,setIcon
此方法以生成禁用的Icon
。 如果null
作为icon
传递,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
传递,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外观和感觉”。 此字符串供用户使用,例如在窗口标题或ToolTip消息中。- 结果
- 外观和感觉的简短描述
-
getSupportsWindowDecorations
public boolean getSupportsWindowDecorations()
返回true
如果LookAndFeel
返回RootPaneUI
实例支持提供Window
在装饰JRootPane
。默认实现返回
false
,支持Window
装饰的子类应覆盖此并返回true
。- 结果
-
true
如果由此外观创建的RootPaneUI
实例支持客户端装饰 - 从以下版本开始:
- 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
public void uninitialize()
取消初始化外观和感觉。 虽然此方法是公共的,但只应在卸载外观时由UIManager
调用。 例如,UIManager.setLookAndFeel
在外观更改时调用此方法。子类可以选择在这里释放一些资源。
-
getDefaults
public UIDefaults getDefaults()
返回外观默认值。 虽然此方法是公共的,但只有当外观设置为当前外观并且在调用initialize
之后,才应该由UIManager
调用它。- 结果
- 外观默认
- 另请参见:
-
initialize()
,uninitialize()
,UIManager.setLookAndFeel(javax.swing.LookAndFeel)
-
-