Module  java.desktop
软件包  javax.swing

Class LookAndFeel

  • 已知直接子类:
    BasicLookAndFeelMultiLookAndFeel


    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" ,在UIDefaultsgetDefaults返回。 有关如何获取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()返回一个没有实现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 另外,除非另有说明,否则所有install方法都会抛出一个NullPointerException如果一个null组件被传入。
    从以下版本开始:
    1.2
    • 构造方法详细信息

      • LookAndFeel

        public LookAndFeel​()
    • 方法详细信息

      • installBorder

        public static void installBorder​(JComponent c,
                                         String defaultBorderName)
        使用默认值设置组件边框属性的便利方法。 边框仅在边框为nullnull的实例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)
        如果开发人员尚未设置该属性,则在方法上安装具有指定名称和值的属性。 该方法旨在由需要为原始类型(boolean,int,..)的属性指定默认值的ui委托实例使用,但不希望覆盖客户端设置的值。 由于原始属性值不能用UIResource标记包装,因此此方法使用私有状态来确定属性是否已由客户端设置。
        参数
        c - 设置属性的目标组件
        propertyName - 要设置的属性的名称
        propertyValue - 物业的价值
        异常
        IllegalArgumentException - 如果指定的属性不是可以使用此方法设置的属性
        ClassCastException - 如果属性值尚未由开发人员设置,并且类型与属性的类型不匹配
        NullPointerException - 如果 cnull ,或者指定的属性尚未被开发者设置,而 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 ,则最后一个元素被忽略。

        供给null为任一值keyaction的一部分key-action在创建一对结果KeyBinding与对应值null Swing的其他地区预计non-null的值KeyBinding ,应该避免将null因为无论是key或者action的一部分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是任一的一个实例KeyStrokeString标识KeyStroke的结合。 具体格式请参考KeyStroke.getKeyStroke(String) 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​(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.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, fallbackValue返回的对象作为值
        结果
        桌面属性的当前值
        从以下版本开始:
        1.4
        另请参见:
        Toolkit.getDesktopProperty(java.lang.String)
      • getDisabledIcon

        public Icon getDisabledIcon​(JComponent component,
                                    Icon icon)
        返回一个禁用外观的Icon 当一个没有被指定时,该方法用于生成一个禁用的Icon 例如,如果您创建一个JButton并且仅通过setIcon指定一个IconsetIcon此方法来生成禁用的Icon 如果null传递为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此方法返回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消息中。
        结果
        外观简洁的描述
      • 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()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