- 所有已实现的接口:
-
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
的确切行为是未指定的。很可能会收到意外异常、绘图问题或更糟的情况。
默认外观和感觉
选择用于默认外观和感觉的类的方式如下:- 如果系统属性
swing.defaultlaf
不为null
,则将其值用作默认外观和感觉类名。 - 如果存在包含键
swing.defaultlaf
的Properties
文件swing.properties
,则将其值用作默认外观和感觉类名。检查swing.properties
的位置可能会根据 Java 平台的实现而有所不同。通常,swing.properties
文件位于 Java 安装目录的conf
子目录中。有关详细信息,请参考正在使用的实现的发行说明。 - 否则使用跨平台外观和感觉。
UIManager
管理三组 UIDefaults
。依次为:
- 开发者默认值。除了少数例外,Swing 不会更改开发者默认值; 这些默认值旨在由开发者修改和使用。
- 外观和感觉默认值。外观和感觉默认值由安装为当前外观和感觉时的外观和感觉提供 (
setLookAndFeel()
被调用)。可以使用 getLookAndFeelDefaults()
方法获取外观和感觉默认值。
- 系统默认值。系统默认值由 Swing 提供。
调用任何 get
方法都会依次检查每个默认值,返回第一个 non-null
值。例如,调用 UIManager.getString("Table.foreground")
首先检查开发者默认值。如果开发者默认值包含 "Table.foreground"
的值,则返回该值,否则检查外观和感觉默认值,然后是系统默认值。
setLookAndFeel()
被调用)。可以使用 getLookAndFeelDefaults()
方法获取外观和感觉默认值。重要的是要注意,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
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
为配置菜单或初始应用程序设置而提供有关已安装的LookAndFeel
的一些信息。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic void
将一个LookAndFeel
添加到辅助外观和感觉列表中。static void
将一个PropertyChangeListener
添加到监听器列表中。static LookAndFeel
createLookAndFeel
(String name) 创建一个由给定L&F name
名称指定的支持的内置 JavaLookAndFeel
。static Object
从默认值返回一个对象。static Object
返回适合给定区域设置的默认值中的对象。static LookAndFeel[]
返回辅助外观和感觉的列表 (可以为null
)。static boolean
getBoolean
(Object key) 返回与键值关联的默认值中的布尔值。static boolean
getBoolean
(Object key, Locale l) 返回与键值和给定Locale
关联的默认值中的布尔值。static Border
从默认值返回一个边框。static Border
返回适合给定区域设置的默认值中的边框。static Color
从默认值返回一个颜色。static Color
返回适合给定区域设置的默认值中的颜色。static String
返回实现默认跨平台外观和感觉 -- Java 外观和感觉 (JLF) 的LookAndFeel
类的名称。static UIDefaults
返回默认值。static Dimension
getDimension
(Object key) 从默认值返回一个尺寸。static Dimension
getDimension
(Object key, Locale l) 返回适合给定区域设置的默认值中的尺寸。static Font
从默认值返回一个字体。static Font
返回适合给定区域设置的默认值中的字体。static Icon
从默认值返回一个Icon
。static Icon
返回适合给定区域设置的默认值中的Icon
。static Insets
从默认值返回一个Insets
对象。static Insets
返回适合给定区域设置的默认值中的Insets
对象。static UIManager.LookAndFeelInfo[]
返回当前可用的LookAndFeel
实现的LookAndFeelInfo
数组。static int
从默认值返回一个整数。static int
返回适合给定区域设置的默认值中的整数。static LookAndFeel
返回当前外观和感觉或null
。static UIDefaults
返回当前外观和感觉的UIDefaults
,这些默认值是在安装外观和感觉时获取的。static PropertyChangeListener[]
返回添加到此 UIManager 中的所有PropertyChangeListener
的数组。static String
从默认值返回一个字符串。static String
返回适合给定区域设置的默认值中的字符串。static String
返回实现本机系统外观和感觉的LookAndFeel
类的名称 (如果有的话),否则返回默认跨平台LookAndFeel
类的名称。static ComponentUI
getUI
(JComponent target) 返回target
的适当的ComponentUI
实现。static void
installLookAndFeel
(String name, String className) 将指定的外观和感觉添加到可用外观和感觉集合中。static void
将指定的外观和感觉添加到可用外观和感觉集合中。static Object
将对象存储在开发者默认值中。static boolean
从辅助外观和感觉列表中删除一个LookAndFeel
。static void
从监听器列表中删除一个PropertyChangeListener
。static void
设置可用外观和感觉集合。static void
setLookAndFeel
(String className) 加载由给定类名指定的LookAndFeel
,使用当前线程的上下文类加载器,并将其传递给setLookAndFeel(LookAndFeel)
。static void
setLookAndFeel
(LookAndFeel newLookAndFeel) 将当前外观和感觉设置为newLookAndFeel
。
-
Constructor Details
-
UIManager
public UIManager()构造一个UIManager
。
-
-
Method Details
-
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
- 如果infos
为null
-
SecurityException
- 参见:
-
installLookAndFeel
将指定的外观添加到可用外观集合中。虽然此方法允许null
的info
,但强烈建议使用非null
值。- 参数:
-
info
- 一个命名外观并标识实现它的类的LookAndFeelInfo
对象 - 参见:
-
installLookAndFeel
将指定的外观添加到可用外观集合中。虽然此方法不会以任何方式检查参数,但强烈建议提供非null
值。- 参数:
-
name
- 外观的描述性名称 -
className
- 实现外观的类的名称 - 参见:
-
getLookAndFeel
返回当前外观或null
。- 返回:
-
当前外观,或
null
- 参见:
-
createLookAndFeel
创建一个由给定的L&F name
指定的受支持的内置JavaLookAndFeel
。- 参数:
-
name
- 指定内置外观名称的String
- 返回:
-
内置
LookAndFeel
对象 - 抛出:
-
NullPointerException
- 如果name
为null
-
UnsupportedLookAndFeelException
- 如果给定名称找不到或不受底层平台支持的内置JavaL&F
- 自:
- 9
- 参见:
-
setLookAndFeel
public static void setLookAndFeel(LookAndFeel newLookAndFeel) throws UnsupportedLookAndFeelException 将当前外观设置为newLookAndFeel
。如果当前外观为非null
,则在其上调用uninitialize
。如果newLookAndFeel
为非null
,则在其上调用initialize
,然后调用getDefaults
。从newLookAndFeel.getDefaults()
返回的默认值将取代先前外观的默认值。如果newLookAndFeel
为null
,则外观默认值将设置为null
。可以使用
null
值将外观设置为null
。由于大多数Swing功能都需要LookAndFeel
,因此强烈不建议将LookAndFeel
设置为null
。这是一个JavaBeans绑定属性。
- 参数:
-
newLookAndFeel
- 要安装的LookAndFeel
- 抛出:
-
UnsupportedLookAndFeelException
- 如果newLookAndFeel
为非null
且newLookAndFeel.isSupportedLookAndFeel()
返回false
- 参见:
-
setLookAndFeel
public static void setLookAndFeel(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException 加载由给定类名指定的LookAndFeel
,使用当前线程的上下文类加载器,并将其传递给setLookAndFeel(LookAndFeel)
。- 参数:
-
className
- 指定实现外观的类的名称的字符串 - 抛出:
-
ClassNotFoundException
- 如果找不到LookAndFeel
类 -
InstantiationException
- 如果无法创建类的新实例 -
IllegalAccessException
- 如果类或初始化程序不可访问 -
UnsupportedLookAndFeelException
- 如果lnf.isSupportedLookAndFeel()
为false -
ClassCastException
- 如果className
不标识扩展LookAndFeel
的类 -
NullPointerException
- 如果className
为null
-
getSystemLookAndFeelClassName
如果存在本地系统外观实现,则返回实现该外观的LookAndFeel
类的名称,否则返回默认跨平台LookAndFeel
类的名称。可以通过设置swing.systemlaf
系统属性来覆盖此值。- 返回:
-
LookAndFeel
类的String
- 参见:
-
getCrossPlatformLookAndFeelClassName
返回实现默认跨平台外观(JLF)的LookAndFeel
类的名称。可以通过设置swing.crossplatformlaf
系统属性来覆盖此值。- 返回:
- JLF实现类的字符串
- 参见:
-
getDefaults
返回默认值。返回的默认值使用类文档中指定的逻辑解析。- 返回:
-
包含默认值的
UIDefaults
对象
-
getFont
从默认值返回一个字体。如果key
的值不是Font
,则返回null
。- 参数:
-
key
- 指定字体的Object
- 返回:
-
Font
对象 - 抛出:
-
NullPointerException
- 如果key
为null
-
getFont
返回适合给定区域设置的默认值中的字体。如果key
的值不是Font
,则返回null
。- 参数:
-
key
- 指定字体的Object
-
l
- 要获取字体的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
Font
对象 - 抛出:
-
NullPointerException
- 如果key
为null
- 自:
- 1.4
-
getColor
从默认值返回一个颜色。如果key
的值不是Color
,则返回null
。- 参数:
-
key
- 指定颜色的Object
- 返回:
-
Color
对象 - 抛出:
-
NullPointerException
- 如果key
为null
-
getColor
返回适合给定区域设置的默认值中的颜色。如果key
的值不是Color
,则返回null
。- 参数:
-
key
- 指定颜色的Object
-
l
- 要获取颜色的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
Color
对象 - 抛出:
-
NullPointerException
- 如果key
为null
- 自:
- 1.4
-
getIcon
从默认值返回一个Icon
。如果key
的值不是Icon
,则返回null
。- 参数:
-
key
- 指定图标的Object
- 返回:
-
Icon
对象 - 抛出:
-
NullPointerException
- 如果key
为null
-
getIcon
从默认值返回适合给定区域设置的Icon
。如果key
的值不是Icon
,则返回null
。- 参数:
-
key
- 指定图标的Object
-
l
- 所需图标的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
Icon
对象 - 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
getBorder
从默认值返回一个边框。如果key
的值不是Border
,则返回null
。- 参数:
-
key
- 指定边框的Object
- 返回:
-
Border
对象 - 抛出:
-
NullPointerException
- 如果key
为null
-
getBorder
从默认值返回适合给定区域设置的边框。如果key
的值不是Border
,则返回null
。- 参数:
-
key
- 指定边框的Object
-
l
- 所需边框的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
Border
对象 - 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
getString
从默认值返回一个字符串。如果key
的值不是String
,则返回null
。- 参数:
-
key
- 指定字符串的Object
- 返回:
-
String
- 抛出:
-
NullPointerException
- 如果key
为null
-
getString
从默认值返回适合给定区域设置的字符串。如果key
的值不是String
,则返回null
。- 参数:
-
key
- 指定字符串的Object
-
l
- 所需字符串的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
String
- 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
getInt
从默认值返回一个整数。如果key
的值不是Integer
,或者不存在,则返回0
。- 参数:
-
key
- 指定整数的Object
- 返回:
- 整数
- 抛出:
-
NullPointerException
- 如果key
为null
-
getInt
从默认值返回适合给定区域设置的整数。如果key
的值不是Integer
,或者不存在,则返回0
。- 参数:
-
key
- 指定整数的Object
-
l
- 所需整数的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
- 整数
- 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
getBoolean
从默认值返回与键值关联的布尔值。如果未找到键或键不表示布尔值,则返回false
。- 参数:
-
key
- 指定所需布尔值的键的Object
- 返回:
- 与键对应的布尔值
- 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
getBoolean
从默认值返回与键值和给定Locale
关联的布尔值。如果未找到键或键不表示布尔值,则返回false
。- 参数:
-
key
- 指定所需布尔值的键的Object
-
l
- 所需布尔值的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
- 与键对应的布尔值
- 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
getInsets
从默认值返回一个Insets
对象。如果key
的值不是Insets
,则返回null
。- 参数:
-
key
- 指定Insets
对象的Object
- 返回:
-
Insets
对象 - 抛出:
-
NullPointerException
- 如果key
为null
-
getInsets
从默认值返回适合给定区域设置的Insets
对象。如果key
的值不是Insets
,则返回null
。- 参数:
-
key
- 指定Insets
对象的Object
-
l
- 所需对象的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
Insets
对象 - 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
getDimension
从默认值返回一个Dimension
对象。如果key
的值不是Dimension
,则返回null
。- 参数:
-
key
- 指定维度对象的Object
- 返回:
-
Dimension
对象 - 抛出:
-
NullPointerException
- 如果key
为null
-
getDimension
从默认值返回适合给定区域设置的Dimension
对象。如果key
的值不是Dimension
,则返回null
。- 参数:
-
key
- 指定维度对象的Object
-
l
- 所需对象的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
Dimension
对象 - 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
get
从默认值返回一个对象。- 参数:
-
key
- 指定所需对象的Object
- 返回:
-
Object
- 抛出:
-
NullPointerException
- 如果key
为null
-
get
从默认值返回适合给定区域设置的对象。- 参数:
-
key
- 指定所需对象的Object
-
l
- 所需对象的Locale
;有关如何处理null
Locale
的详细信息,请参阅UIDefaults
- 返回:
-
Object
- 抛出:
-
NullPointerException
- 如果key
为null
- 自版本:
- 1.4
-
put
在开发者默认值中存储一个对象。这是getDefaults().put(key, value)
的封装方法。这仅影响开发者默认值,而不影响系统或外观默认值。- 参数:
-
key
- 一个指定检索键的Object
-
value
- 要存储的Object
;参考UIDefaults
以了解如何处理null
- 返回:
-
由
UIDefaults.put(java.lang.Object, java.lang.Object)
返回的Object
- 抛出:
-
NullPointerException
- 如果key
为null
- 参见:
-
getUI
返回target
的适当ComponentUI
实现。通常,这是getDefaults().getUI(target)
的代理。但是,如果安装了辅助外观,首先在多路复用外观的默认值上调用getUI(target)
,如果该值为non-null
,则返回该值。- 参数:
-
target
- 要为其返回ComponentUI
的JComponent
- 返回:
-
target
的ComponentUI
对象 - 抛出:
-
NullPointerException
- 如果target
为null
- 参见:
-
getLookAndFeelDefaults
返回当前外观的UIDefaults
,这些UIDefaults
是在安装外观时获取的。一般来说,开发人员应该使用从
getDefaults()
返回的UIDefaults
。由于当前外观可能期望某些值存在,修改从此方法返回的UIDefaults
可能会导致意外结果。- 返回:
-
当前外观的
UIDefaults
- 参见:
-
addAuxiliaryLookAndFeel
将一个LookAndFeel
添加到辅助外观列表中。辅助外观告诉多路复用外观在创建多路复用UI时,除了默认的LookAndFeel
类之外,还应该使用哪些组件实例的其他LookAndFeel
类。更改只有在创建新的UI类或在组件实例上更改默认外观时才会生效。请注意,这些与已安装的外观不同。
- 参数:
-
laf
-LookAndFeel
对象 - 参见:
-
removeAuxiliaryLookAndFeel
从辅助外观列表中移除一个LookAndFeel
。辅助外观告诉多路复用外观在创建多路复用UI时,除了默认的LookAndFeel
类之外,还应该使用哪些组件实例的其他LookAndFeel
类。更改只有在创建新的UI类或在组件实例上更改默认外观时才会生效。请注意,这些与已安装的外观不同。
- 参数:
-
laf
- 要移除的LookAndFeel
- 返回:
-
如果从列表中移除了
LookAndFeel
,则返回true - 参见:
-
getAuxiliaryLookAndFeels
返回辅助外观列表(可以为null
)。辅助外观告诉多路复用外观在创建多路复用UI时,除了默认的外观类之外,还应该使用哪些组件实例的其他外观类。请注意,这些与已安装的外观不同。
- 返回:
-
辅助
LookAndFeel
的列表或null
- 参见:
-
addPropertyChangeListener
将一个PropertyChangeListener
添加到监听器列表中。该监听器将注册所有属性。- 参数:
-
listener
- 要添加的PropertyChangeListener
- 参见:
-
removePropertyChangeListener
从监听器列表中移除一个PropertyChangeListener
。这将移除为所有属性注册的PropertyChangeListener
。- 参数:
-
listener
- 要移除的PropertyChangeListener
- 参见:
-
getPropertyChangeListeners
返回添加到此UIManager中的所有PropertyChangeListener
的数组。- 返回:
-
所有已添加的
PropertyChangeListener
的数组,如果没有添加监听器,则返回空数组 - 自1.4起:
- 1.4
-