模块  java.desktop
软件包  javax.swing

Class LookAndFeel

  • 已知直接子类:
    BasicLookAndFeelMultiLookAndFeel

    public abstract class LookAndFeelextends Object
    LookAndFeelLookAndFeel封装了外观。 除了安装外观,大多数开发人员都不需要直接与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" ,其中UIDefaultsgetDefaults返回的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()返回了未实现UIResourcenon-null值,则BasicButtonUI.installDefaults将不会更改JButton的字体。

    对于原始值,例如opaque ,应该调用方法installProperty installProperty仅在开发人员未更改该值时才更改相应的属性。

    ComponentUI实现应使用此类提供的各种安装方法,因为它们使用建议的准则处理必要的检查和安装属性。

    例外

    如果要更改的属性值为nullUIResourcenull提供的所有安装方法LookAndFeel需要访问默认值。 例如,安装字体会执行以下操作:
      JComponent c;   Font font = c.getFont();   if (font == null || (font instanceof UIResource)) {       c.setFont(UIManager.getFont("fontKey"));   } 
    如果字体为nullUIResource ,则使用密钥fontKey查询默认表。 所有UIDefault's获取方法如果传入NullPointerException则抛出null 因此,除非另有说明各个不同的安装方法LookAndFeel抛出NullPointerException如果当前值是nullUIResource和提供的默认密钥是null 此外,除非另有说明,否则如果null组件,则所有install方法都会抛出NullPointerException
    从以下版本开始:
    1.2
    • 构造方法详细信息

      • LookAndFeel

        public LookAndFeel()
    • 方法详细信息

      • 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 - 如果 cnull
      • installProperty

        public static void installProperty​(JComponent c,                                   String propertyName,                                   Object propertyValue)
        如果开发人员尚未设置该属性,则在组件上安装具有指定名称和值的属性的便捷方法。 此方法旨在由ui委托实例使用,这些实例需要为基本类型(boolean,int,..)的属性指定默认值,但不希望覆盖客户端设置的值。 由于原始属性值无法用UIResource标记包装,因此此方法使用私有状态来确定该属性是否已由客户端设置。
        参数
        c - 要在其上设置属性的目标组件
        propertyName - 要设置的属性的名称
        propertyValue - 该物业的价值
        异常
        IllegalArgumentException - 如果指定的属性不是可以使用此方法设置的属性
        ClassCastException - 如果开发人员尚未设置属性值且类型与属性的类型不匹配
        NullPointerException - 如果 cnull ,或者开发人员未设置named属性, propertyValuenull
        从以下版本开始:
        1.5
      • makeKeyBindings

        public static JTextComponent.KeyBinding[] makeKeyBindings​(Object[] keyBindingList)
        构建KeyBindings数组的便捷方法。 虽然不推荐使用此方法,但开发人员应使用ActionMapInputMap来提供密钥绑定。

        此方法返回的数组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长度为奇数,则忽略最后一个元素。

        keyaction部分提供nullkey-action导致创建KeyBinding ,其对应值为null 由于Swing的其他部分预期non-null值为KeyBinding ,因此您应避免将null作为keyaction部分提供key-action

        参数
        keyBindingList - 一组 key-action
        结果
        数组 KeyBindings
        异常
        NullPointerException - 如果 keyBindingListnull
        ClassCastException - 如果 key部分不是 KeyStrokeString ,或者 action部分不是 String
        另请参见:
        ActionMapInputMapKeyStroke.getKeyStroke(char)
      • loadKeyBindings

        public static void loadKeyBindings​(InputMap retMap,                                   Object[] keys)
        使用指定的绑定填充InputMap 绑定作为交替keystroke-action key对的列表提供。 所述keystroke是任一的一个实例KeyStroke ,或String标识KeyStroke的结合。 有关具体格式,请参阅KeyStroke.getKeyStroke(String) action key对的action key部分是InputMapKeyStroke注册的关键。

        以下说明加载InputMap与两个key-action对:

          LookAndFeel.loadKeyBindings(inputMap, new Object[] {     "control X", "cut",     "control V", "paste"   }); 

        提供null绑定列表( keys )不会以任何方式更改retMap

        指定null action key导致从InputMap中删除keystroke's条目。 A null keystroke被忽略。

        参数
        retMap - InputMap添加 key-action
        keys - 要添加到 retMap绑定
        异常
        NullPointerException - 如果 keysnon-null ,非为空,而 retMapnull
        从以下版本开始:
        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.LazyValueIconClass.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指定IconsetIcon此方法以生成禁用的Icon 如果null作为icon传递, icon此方法返回null

        一些外观可能无法呈现残疾Icon ,在这种情况下,他们会忽略这一点。

        参数
        component - JComponent将显示 Icon ,可能是 null
        icon - Icon从中生成禁用的图标
        结果
        已禁用 Iconnull如果无法生成合适的 Icon
        从以下版本开始:
        1.5
      • getDisabledSelectedIcon

        public Icon getDisabledSelectedIcon​(JComponent component,                                    Icon icon)
        返回Icon以供也被选中的已禁用组件使用。 此方法用于为处于禁用状态和选定状态但没有针对此状态的特定Icon组件生成Icon 例如,如果您创建JButton并仅通过setIcon指定IconsetIcon此方法以生成已禁用且已选定的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消息中。
        结果
        外观和感觉的简短描述
      • 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()UIManager.setLookAndFeel(javax.swing.LookAndFeel)
      • uninitialize

        public void uninitialize()
        取消初始化外观和感觉。 虽然此方法是公共的,但只应在卸载外观时由UIManager调用。 例如, UIManager.setLookAndFeel在外观更改时调用此方法。

        子类可以选择在这里释放一些资源。

        另请参见:
        initialize()UIManager.setLookAndFeel(javax.swing.LookAndFeel)
      • toString

        public String toString()
        返回显示和标识此对象属性的字符串。
        重写:
        toStringObject
        结果
        a String representation of this object