- java.lang.Object
-
- javax.swing.LookAndFeel
-
- 已知直接子类:
-
BasicLookAndFeel,MultiLookAndFeel
public abstract class LookAndFeel extends 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()
-
方法摘要
所有方法 静态方法 实例方法 抽象方法 具体的方法 变量和类型 方法 描述 UIDefaultsgetDefaults()返回外观默认值。abstract StringgetDescription()返回此外观实现的单行描述,例如static ObjectgetDesktopPropertyValue(String systemPropertyName, Object fallbackValue)通过调用Toolkit.getDefaultToolkit().getDesktopProperty()返回指定的系统桌面属性的Toolkit.getDefaultToolkit().getDesktopProperty()。IcongetDisabledIcon(JComponent component, Icon icon)返回具有禁用外观的Icon。IcongetDisabledSelectedIcon(JComponent component, Icon icon)返回Icon,供已选中的已禁用组件使用。abstract StringgetID()返回标识此外观的字符串。LayoutStylegetLayoutStyle()返回LayoutStyle以获得此外观。abstract StringgetName()返回标识此外观的短字符串,例如booleangetSupportsWindowDecorations()返回true如果LookAndFeel返回RootPaneUI实例支持提供Window在装饰JRootPane。voidinitialize()初始化外观。static voidinstallBorder(JComponent c, String defaultBorderName)使用默认值设置组件边框属性的便捷方法。static voidinstallColors(JComponent c, String defaultBgName, String defaultFgName)使用默认值设置组件的前景色和背景色属性的便捷方法。static voidinstallColorsAndFont(JComponent c, String defaultBgName, String defaultFgName, String defaultFontName)使用默认值设置组件的前景,背景和字体属性的便捷方法。static voidinstallProperty(JComponent c, String propertyName, Object propertyValue)如果开发人员尚未设置该属性,则在组件上安装具有指定名称和值的属性的便捷方法。abstract booleanisNativeLookAndFeel()如果底层平台具有“本机”外观,并且这是它的实现,则返回true。abstract booleanisSupportedLookAndFeel()如果底层平台支持和/或允许此外观,则返回true。static voidloadKeyBindings(InputMap retMap, Object[] keys)使用指定的绑定填充InputMap。static ComponentInputMapmakeComponentInputMap(JComponent c, Object[] keys)创建ComponentInputMapUIResource从keys。static ObjectmakeIcon(类<?> baseClass, String gifFile)创建并返回加载图像的UIDefault.LazyValue。static InputMapmakeInputMap(Object[] keys)创建一个InputMapUIResource从keys。static JTextComponent.KeyBinding[]makeKeyBindings(Object[] keyBindingList)构建数组KeyBindings便捷方法。voidprovideErrorFeedback(Component component)当用户尝试无效操作时调用,例如粘贴到具有焦点的不可编辑的JTextField。StringtoString()返回显示和标识此对象属性的字符串。voiduninitialize()取消初始化外观和感觉。static voiduninstallBorder(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。指定
nullaction key导致从InputMap中删除keystroke's条目。 Anullkeystroke被忽略。- 参数
-
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)
-
-