Module java.desktop
Package javax.swing

Class UIManager

java.lang.Object
javax.swing.UIManager
所有已实现的接口:
Serializable

public class UIManager extends Object implements Serializable
UIManager 管理当前的外观和感觉,可用外观和感觉集合,当外观和感觉更改时通知的 PropertyChangeListeners,外观和感觉默认值,以及用于获取各种默认值的便利方法。

指定外观和感觉

外观和感觉可以通过两种不同的方式指定: 通过指定外观和感觉的类的完全限定名称,或通过创建 LookAndFeel 的实例并将其传递给 setLookAndFeel。以下示例说明将外观和感觉设置为系统外观和感觉:
   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 
以下示例说明根据类名设置外观和感觉:
   UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
 
一旦更改了外观和感觉,就必须在所有 JComponents 上调用 updateUI。方法 SwingUtilities.updateComponentTreeUI(java.awt.Component) 使得将 updateUI 应用于包含层次结构变得容易。有关详细信息,请参考该方法。在更改外观和感觉后不调用 updateUI 的确切行为是未指定的。很可能会收到意外异常、绘图问题或更糟的情况。

默认外观和感觉

选择用于默认外观和感觉的类的方式如下:
  1. 如果系统属性 swing.defaultlaf 不为 null,则将其值用作默认外观和感觉类名。
  2. 如果存在包含键 swing.defaultlafProperties 文件 swing.properties,则将其值用作默认外观和感觉类名。检查 swing.properties 的位置可能会根据 Java 平台的实现而有所不同。通常,swing.properties 文件位于 Java 安装目录的 conf 子目录中。有关详细信息,请参考正在使用的实现的发行说明。
  3. 否则使用跨平台外观和感觉。

UIManager 管理三组 UIDefaults。依次为:
  1. 开发者默认值。除了少数例外,Swing 不会更改开发者默认值; 这些默认值旨在由开发者修改和使用。
  2. 外观和感觉默认值。外观和感觉默认值由安装为当前外观和感觉时的外观和感觉提供 (setLookAndFeel() 被调用)。可以使用 getLookAndFeelDefaults() 方法获取外观和感觉默认值。
  3. 系统默认值。系统默认值由 Swing 提供。
调用任何 get 方法都会依次检查每个默认值,返回第一个 non-null 值。例如,调用 UIManager.getString("Table.foreground") 首先检查开发者默认值。如果开发者默认值包含 "Table.foreground" 的值,则返回该值,否则检查外观和感觉默认值,然后是系统默认值。

重要的是要注意,getDefaults 返回一个具有此解析逻辑的自定义 UIDefaults 实例。例如,UIManager.getDefaults().getString("Table.foreground") 等同于 UIManager.getString("Table.foreground")。两者都使用刚才描述的算法进行解析。在许多地方,文档使用单词默认值来指代具有先前描述的解析逻辑的自定义 UIDefaults 实例。

当更改外观和感觉时,UIManager 仅会更改外观和感觉默认值; 开发者和系统默认值不会以任何方式被 UIManager 更改。

特定外观和感觉支持的默认值集由该外观和感觉定义和记录。此外,每个外观和感觉,或由外观和感觉提供的 ComponentUI,可能在其生命周期的不同时间访问默认值。某些外观和感觉可能会积极地查找默认值,因此更改默认值可能在安装外观和感觉后不起作用。其他外观和感觉可能会懒惰地访问默认值,因此更改默认值可能会影响现有的外观和感觉。最后,其他外观和感觉可能根本不会从默认表中配置自己。尽管如此,通常情况下,外观和感觉期望某些默认值,因此通常情况下,由一个外观和感觉提供的 ComponentUI 不会与另一个外观和感觉一起使用。

警告: 此类的序列化对象将不兼容未来的 Swing 版本。当前的序列化支持适用于短期存储或在运行相同版本的 Swing 的应用程序之间的 RMI。从 1.4 版开始,已将所有 JavaBeans 的长期存储支持添加到 java.beans 包中。请参阅 XMLEncoder

自:
1.2
  • Constructor Details

    • UIManager

      public UIManager()
      构造一个 UIManager
  • Method Details

    • getInstalledLookAndFeels

      public static UIManager.LookAndFeelInfo[] getInstalledLookAndFeels()
      返回当前可用的 LookAndFeel 实现的 LookAndFeelInfo 数组。 LookAndFeelInfo 对象可用于由应用程序为用户构建外观和感觉选项菜单,或确定在启动时设置哪种外观和感觉。为避免创建大量的 LookAndFeel 对象的开销,LookAndFeelInfo 保留了 LookAndFeel 类的类名,而不是实际的 LookAndFeel 实例。

      以下示例说明如何从 LookAndFeelInfo 的实例设置当前外观和感觉:

         UIManager.setLookAndFeel(info.getClassName());
       
      返回:
      一个 LookAndFeelInfo 对象数组
      参见:
    • setInstalledLookAndFeels

      public static void setInstalledLookAndFeels(UIManager.LookAndFeelInfo[] infos) throws SecurityException
      设置可用外观和感觉集合。虽然此方法不会检查所有 LookAndFeelInfos 是否为 non-null,但强烈建议在 infos 数组中仅提供 non-null 值。
      参数:
      infos - 一组指定可用外观的LookAndFeelInfo对象
      抛出:
      NullPointerException - 如果infosnull
      SecurityException
      参见:
    • installLookAndFeel

      public static void installLookAndFeel(UIManager.LookAndFeelInfo info)
      将指定的外观添加到可用外观集合中。虽然此方法允许nullinfo,但强烈建议使用非null值。
      参数:
      info - 一个命名外观并标识实现它的类的LookAndFeelInfo对象
      参见:
    • installLookAndFeel

      public static void installLookAndFeel(String name, String className)
      将指定的外观添加到可用外观集合中。虽然此方法不会以任何方式检查参数,但强烈建议提供非null值。
      参数:
      name - 外观的描述性名称
      className - 实现外观的类的名称
      参见:
    • getLookAndFeel

      public static LookAndFeel getLookAndFeel()
      返回当前外观或null
      返回:
      当前外观,或null
      参见:
    • createLookAndFeel

      public static LookAndFeel createLookAndFeel(String name) throws UnsupportedLookAndFeelException
      创建一个由给定的L&F name指定的受支持的内置Java LookAndFeel
      参数:
      name - 指定内置外观名称的String
      返回:
      内置LookAndFeel对象
      抛出:
      NullPointerException - 如果namenull
      UnsupportedLookAndFeelException - 如果给定名称找不到或不受底层平台支持的内置Java L&F
      自:
      9
      参见:
    • setLookAndFeel

      public static void setLookAndFeel(LookAndFeel newLookAndFeel) throws UnsupportedLookAndFeelException
      将当前外观设置为newLookAndFeel。如果当前外观为非null,则在其上调用uninitialize。如果newLookAndFeel非null,则在其上调用initialize,然后调用getDefaults。从newLookAndFeel.getDefaults()返回的默认值将取代先前外观的默认值。如果newLookAndFeelnull,则外观默认值将设置为null

      可以使用null值将外观设置为null。由于大多数Swing功能都需要LookAndFeel,因此强烈不建议将LookAndFeel设置为null

      这是一个JavaBeans绑定属性。

      参数:
      newLookAndFeel - 要安装的LookAndFeel
      抛出:
      UnsupportedLookAndFeelException - 如果newLookAndFeel非nullnewLookAndFeel.isSupportedLookAndFeel()返回false
      参见:
    • setLookAndFeel

      加载由给定类名指定的LookAndFeel,使用当前线程的上下文类加载器,并将其传递给setLookAndFeel(LookAndFeel)
      参数:
      className - 指定实现外观的类的名称的字符串
      抛出:
      ClassNotFoundException - 如果找不到LookAndFeel
      InstantiationException - 如果无法创建类的新实例
      IllegalAccessException - 如果类或初始化程序不可访问
      UnsupportedLookAndFeelException - 如果lnf.isSupportedLookAndFeel()为false
      ClassCastException - 如果className不标识扩展LookAndFeel的类
      NullPointerException - 如果classNamenull
    • getSystemLookAndFeelClassName

      public static String getSystemLookAndFeelClassName()
      如果存在本地系统外观实现,则返回实现该外观的LookAndFeel类的名称,否则返回默认跨平台LookAndFeel类的名称。可以通过设置swing.systemlaf系统属性来覆盖此值。
      返回:
      LookAndFeel类的String
      参见:
    • getCrossPlatformLookAndFeelClassName

      public static String getCrossPlatformLookAndFeelClassName()
      返回实现默认跨平台外观(JLF)的LookAndFeel类的名称。可以通过设置swing.crossplatformlaf系统属性来覆盖此值。
      返回:
      JLF实现类的字符串
      参见:
    • getDefaults

      public static UIDefaults getDefaults()
      返回默认值。返回的默认值使用类文档中指定的逻辑解析。
      返回:
      包含默认值的UIDefaults对象
    • getFont

      public static Font getFont(Object key)
      从默认值返回一个字体。如果key的值不是Font,则返回null
      参数:
      key - 指定字体的Object
      返回:
      Font对象
      抛出:
      NullPointerException - 如果keynull
    • getFont

      public static Font getFont(Object key, Locale l)
      返回适合给定区域设置的默认值中的字体。如果key的值不是Font,则返回null
      参数:
      key - 指定字体的Object
      l - 要获取字体的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      Font对象
      抛出:
      NullPointerException - 如果keynull
      自:
      1.4
    • getColor

      public static Color getColor(Object key)
      从默认值返回一个颜色。如果key的值不是Color,则返回null
      参数:
      key - 指定颜色的Object
      返回:
      Color对象
      抛出:
      NullPointerException - 如果keynull
    • getColor

      public static Color getColor(Object key, Locale l)
      返回适合给定区域设置的默认值中的颜色。如果key的值不是Color,则返回null
      参数:
      key - 指定颜色的Object
      l - 要获取颜色的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      Color对象
      抛出:
      NullPointerException - 如果keynull
      自:
      1.4
    • getIcon

      public static Icon getIcon(Object key)
      从默认值返回一个Icon。如果key的值不是Icon,则返回null
      参数:
      key - 指定图标的Object
      返回:
      Icon对象
      抛出:
      NullPointerException - 如果keynull
    • getIcon

      public static Icon getIcon(Object key, Locale l)
      从默认值返回适合给定区域设置的Icon。如果key的值不是Icon,则返回null
      参数:
      key - 指定图标的Object
      l - 所需图标的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      Icon对象
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • getBorder

      public static Border getBorder(Object key)
      从默认值返回一个边框。如果key的值不是Border,则返回null
      参数:
      key - 指定边框的Object
      返回:
      Border对象
      抛出:
      NullPointerException - 如果keynull
    • getBorder

      public static Border getBorder(Object key, Locale l)
      从默认值返回适合给定区域设置的边框。如果key的值不是Border,则返回null
      参数:
      key - 指定边框的Object
      l - 所需边框的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      Border对象
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • getString

      public static String getString(Object key)
      从默认值返回一个字符串。如果key的值不是String,则返回null
      参数:
      key - 指定字符串的Object
      返回:
      String
      抛出:
      NullPointerException - 如果keynull
    • getString

      public static String getString(Object key, Locale l)
      从默认值返回适合给定区域设置的字符串。如果key的值不是String,则返回null
      参数:
      key - 指定字符串的Object
      l - 所需字符串的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      String
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • getInt

      public static int getInt(Object key)
      从默认值返回一个整数。如果key的值不是Integer,或者不存在,则返回0
      参数:
      key - 指定整数的Object
      返回:
      整数
      抛出:
      NullPointerException - 如果keynull
    • getInt

      public static int getInt(Object key, Locale l)
      从默认值返回适合给定区域设置的整数。如果key的值不是Integer,或者不存在,则返回0
      参数:
      key - 指定整数的Object
      l - 所需整数的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      整数
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • getBoolean

      public static boolean getBoolean(Object key)
      从默认值返回与键值关联的布尔值。如果未找到键或键不表示布尔值,则返回false
      参数:
      key - 指定所需布尔值的键的Object
      返回:
      与键对应的布尔值
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • getBoolean

      public static boolean getBoolean(Object key, Locale l)
      从默认值返回与键值和给定Locale关联的布尔值。如果未找到键或键不表示布尔值,则返回false
      参数:
      key - 指定所需布尔值的键的Object
      l - 所需布尔值的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      与键对应的布尔值
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • getInsets

      public static Insets getInsets(Object key)
      从默认值返回一个Insets对象。如果key的值不是Insets,则返回null
      参数:
      key - 指定Insets对象的Object
      返回:
      Insets对象
      抛出:
      NullPointerException - 如果keynull
    • getInsets

      public static Insets getInsets(Object key, Locale l)
      从默认值返回适合给定区域设置的Insets对象。如果key的值不是Insets,则返回null
      参数:
      key - 指定Insets对象的Object
      l - 所需对象的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      Insets对象
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • getDimension

      public static Dimension getDimension(Object key)
      从默认值返回一个Dimension对象。如果key的值不是Dimension,则返回null
      参数:
      key - 指定维度对象的Object
      返回:
      Dimension对象
      抛出:
      NullPointerException - 如果keynull
    • getDimension

      public static Dimension getDimension(Object key, Locale l)
      从默认值返回适合给定区域设置的Dimension对象。如果key的值不是Dimension,则返回null
      参数:
      key - 指定维度对象的Object
      l - 所需对象的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      Dimension对象
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • get

      public static Object get(Object key)
      从默认值返回一个对象。
      参数:
      key - 指定所需对象的Object
      返回:
      Object
      抛出:
      NullPointerException - 如果keynull
    • get

      public static Object get(Object key, Locale l)
      从默认值返回适合给定区域设置的对象。
      参数:
      key - 指定所需对象的Object
      l - 所需对象的Locale;有关如何处理null Locale的详细信息,请参阅UIDefaults
      返回:
      Object
      抛出:
      NullPointerException - 如果keynull
      自版本:
      1.4
    • put

      public static Object put(Object key, Object value)
      在开发者默认值中存储一个对象。这是getDefaults().put(key, value)的封装方法。这仅影响开发者默认值,而不影响系统或外观默认值。
      参数:
      key - 一个指定检索键的Object
      value - 要存储的Object;参考UIDefaults以了解如何处理null
      返回:
      UIDefaults.put(java.lang.Object, java.lang.Object)返回的Object
      抛出:
      NullPointerException - 如果keynull
      参见:
    • getUI

      public static ComponentUI getUI(JComponent target)
      返回target的适当ComponentUI实现。通常,这是getDefaults().getUI(target)的代理。但是,如果安装了辅助外观,首先在多路复用外观的默认值上调用getUI(target),如果该值为non-null,则返回该值。
      参数:
      target - 要为其返回ComponentUIJComponent
      返回:
      targetComponentUI对象
      抛出:
      NullPointerException - 如果targetnull
      参见:
    • getLookAndFeelDefaults

      public static UIDefaults getLookAndFeelDefaults()
      返回当前外观的UIDefaults,这些UIDefaults是在安装外观时获取的。

      一般来说,开发人员应该使用从getDefaults()返回的UIDefaults。由于当前外观可能期望某些值存在,修改从此方法返回的UIDefaults可能会导致意外结果。

      返回:
      当前外观的UIDefaults
      参见:
    • addAuxiliaryLookAndFeel

      public static void addAuxiliaryLookAndFeel(LookAndFeel laf)
      将一个LookAndFeel添加到辅助外观列表中。辅助外观告诉多路复用外观在创建多路复用UI时,除了默认的LookAndFeel类之外,还应该使用哪些组件实例的其他LookAndFeel类。更改只有在创建新的UI类或在组件实例上更改默认外观时才会生效。

      请注意,这些与已安装的外观不同。

      参数:
      laf - LookAndFeel对象
      参见:
    • removeAuxiliaryLookAndFeel

      public static boolean removeAuxiliaryLookAndFeel(LookAndFeel laf)
      从辅助外观列表中移除一个LookAndFeel。辅助外观告诉多路复用外观在创建多路复用UI时,除了默认的LookAndFeel类之外,还应该使用哪些组件实例的其他LookAndFeel类。更改只有在创建新的UI类或在组件实例上更改默认外观时才会生效。

      请注意,这些与已安装的外观不同。

      参数:
      laf - 要移除的LookAndFeel
      返回:
      如果从列表中移除了LookAndFeel,则返回true
      参见:
    • getAuxiliaryLookAndFeels

      public static LookAndFeel[] getAuxiliaryLookAndFeels()
      返回辅助外观列表(可以为null)。辅助外观告诉多路复用外观在创建多路复用UI时,除了默认的外观类之外,还应该使用哪些组件实例的其他外观类。

      请注意,这些与已安装的外观不同。

      返回:
      辅助LookAndFeel的列表或null
      参见:
    • addPropertyChangeListener

      public static void addPropertyChangeListener(PropertyChangeListener listener)
      将一个PropertyChangeListener添加到监听器列表中。该监听器将注册所有属性。
      参数:
      listener - 要添加的PropertyChangeListener
      参见:
    • removePropertyChangeListener

      public static void removePropertyChangeListener(PropertyChangeListener listener)
      从监听器列表中移除一个PropertyChangeListener。这将移除为所有属性注册的PropertyChangeListener
      参数:
      listener - 要移除的PropertyChangeListener
      参见:
    • getPropertyChangeListeners

      public static PropertyChangeListener[] getPropertyChangeListeners()
      返回添加到此UIManager中的所有PropertyChangeListener的数组。
      返回:
      所有已添加的PropertyChangeListener的数组,如果没有添加监听器,则返回空数组
      自1.4起:
      1.4