Nimbus中使用的SynthStyle实现。已向NimbusLookAndFeel注册的每个Region都将有一个关联的NimbusStyle。因此,向NimbusLookAndFeel注册的第三方组件将从#getStyle(JComponent, Region)方法中获得来自外观的NimbusStyle。
该类根据标准的Nimbus命名约定正确读取和检索放置在UIDefaults中的值。它将创建和检索那里存储的绘图器、字体、颜色和其他数据。
NimbusStyle还支持根据每个组件的需求覆盖设置。NimbusStyle会检查组件的客户端属性映射中是否存在"Nimbus.Overrides"。如果与此键关联的值是UIDefaults的实例,则该默认表中的值将仅覆盖UIManager中的标准Nimbus默认值,但仅适用于该组件实例。
可选地,您可以指定客户端属性"Nimbus.Overrides.InheritDefaults"。如果为true,则此客户端属性表示应首先读取UIManager中的默认值,然后用组件客户端属性中的默认值替换它们。如果为false,则仅使用组件客户端属性映射中的默认值。如果未指定,则假定为true。
必须为"Nimbus.Overrides"指定"Nimbus.Overrides.InheritDefaults"才能产生任何效果。"Nimbus.Overrides"指示是否存在任何覆盖,而"Nimbus.Overrides.InheritDefaults"指示这些覆盖是否应首先用UIManager中的默认值初始化。
每当为组件的"Nimbus.Overrides"或"Nimbus.Overrides.InheritDefaults"触发属性更改事件时,NimbusStyle都将重新加载。例如,为组件设置新的UIDefaults将导致重新加载样式。
值仅从UIManager中读取一次,然后被缓存。如果需要再次读取值(例如,如果正在重新加载UI),则丢弃此NimbusStyle,并使用NimbusLookAndFeel从中读取一个新的。
对于第三方组件作者,此类中感兴趣的主要API是三个检索绘图器的方法:#getBackgroundPainter、#getForegroundPainter和#getBorderPainter。
NimbusStyle允许您指定自定义状态或修改状态的顺序。Synth(因此Nimbus)具有"状态"的概念。例如,JButton可能处于"MOUSE_OVER"状态、"ENABLED"状态或"DISABLED"状态。这些都是在Synth中定义的"标准"状态,适用于所有Synth Regions。
然而,有时您需要有一个自定义状态。例如,如果要求JButton在其父级为JToolbar时呈现不同,则在Nimbus中,您可以通过在UIDefaults中包含特殊键来指定这些自定义状态。以下UIDefaults条目为此按钮定义了三个状态:
JButton.States = Enabled, Disabled, Toolbar
JButton[Enabled].backgroundPainter = somePainter
JButton[Disabled].background = BLUE
JButton[Toolbar].backgroundPainter = someOtherPaint
如您所见,JButton.States
条目列出了JButton样式将支持的状态。然后为每个状态指定设置。如果未指定JButton.States
条目,则将假定使用标准Synth状态。如果指定了该条目但状态列表为空或为null,则将假定使用标准Synth状态。
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionget
(SynthContext ctx, Object key) 区域特定样式属性的获取器。获取给定SynthContext中指定状态的适当背景绘图器(如果有)。获取给定SynthContext中指定状态的适当边框绘图器(如果有)。protected Color
getColorForState
(SynthContext ctx, ColorType type) 返回指定状态的颜色。protected Font
返回指定状态的字体。获取给定SynthContext中指定状态的适当前景绘图器(如果有)。getInsets
(SynthContext ctx, Insets in) 返回用于计算尺寸信息的插图。getPainter
(SynthContext ctx) 返回将用于绘制的SynthPainter
。void
在context
上安装来自此样式的必要状态到JComponent
。boolean
isOpaque
(SynthContext ctx) 如果区域是不透明的,则返回true。Methods declared in class javax.swing.plaf.synth.SynthStyle
getBoolean, getColor, getFont, getGraphicsUtils, getIcon, getInt, getString, uninstallDefaults
-
Field Details
-
LARGE_KEY
大键- 参见:
-
SMALL_KEY
小键- 参见:
-
MINI_KEY
小键- 参见:
-
LARGE_SCALE
public static final double LARGE_SCALE大规模- 参见:
-
SMALL_SCALE
public static final double SMALL_SCALE小规模- 参见:
-
MINI_SCALE
public static final double MINI_SCALE小规模- 参见:
-
-
Method Details
-
installDefaults
在context
上安装来自此样式的必要状态到JComponent
。重写以使此样式从UIDefaults中填充数据(如果需要)。- 覆盖:
-
installDefaults
在类SynthStyle
中 - 参数:
-
ctx
- 标识要安装属性的SynthContext。
-
getInsets
返回用于计算尺寸信息的插图。重写以使此样式从UIDefaults中填充数据(如果需要)。- 覆盖:
-
getInsets
在类SynthStyle
中 - 参数:
-
ctx
- 标识请求者的SynthContext -
in
- 用于放置返回值的插图。 - 返回:
- 尺寸插图。
-
getColorForState
返回指定状态的颜色。这不应调用JComponent
上的任何方法。重写以使此样式从UIDefaults中填充数据(如果需要)。
此外,NimbusStyle对待ColorTypes与Synth略有不同。
- ColorType.BACKGROUND将等同于UIDefaults中命名为"background"的颜色。
- ColorType.TEXT_BACKGROUND将等同于UIDefaults中命名为"textBackground"的颜色。
- ColorType.FOREGROUND将等同于UIDefaults中命名为"textForeground"的颜色。
- ColorType.TEXT_FOREGROUND将等同于UIDefaults中命名为"textForeground"的颜色。
- 指定者:
-
getColorForState
在类SynthStyle
中 - 参数:
-
ctx
- 标识请求者的SynthContext -
type
- 请求的颜色类型。 - 返回:
- 要渲染的颜色
-
getFontForState
返回指定状态的字体。这不应调用JComponent
上的任何方法。重写以使此样式从UIDefaults中填充数据(如果需要)。如果在UIDefaults中找不到名为"font"的值,则将返回UIDefaults中的"defaultFont"字体。- 指定者:
-
getFontForState
在类SynthStyle
中 - 参数:
-
ctx
- 标识请求者的SynthContext - 返回:
- 要渲染的字体
-
getPainter
返回将用于绘制的SynthPainter
。可能返回null。返回此样式的SynthPainter,最终委托给此样式中安装的绘图器。- 覆盖:
-
getPainter
在类SynthStyle
中 - 参数:
-
ctx
- 标识请求者的SynthContext - 返回:
- 要使用的SynthPainter
-
isOpaque
如果区域是不透明的,则返回true。重写以使此样式从UIDefaults中填充数据(如果需要)。如果在UI默认值中未指定不透明度,则默认为非不透明。- 覆盖:
-
isOpaque
在类SynthStyle
中 - 参数:
-
ctx
- 标识请求者的SynthContext - 返回:
- 如果区域是不透明的,则为true。
-
get
获取特定区域样式属性的Getter。重写以使此样式从UIDefaults中获取数据(如果需要)。
UIDefaults中的属性可以以链式方式指定。例如:
background Button.opacity Button.Enabled.foreground Button.Enabled+Selected.background
在这个例子中,假设您处于Enabled+Selected状态并搜索"foreground"。在这种情况下,我们首先检查Button.Enabled+Selected.foreground,但没有这样的颜色存在。然后我们回退到下一个有效状态,即Button.Enabled.foreground,在这种情况下找到匹配项。因此我们返回它。
再次,如果我们处于Enabled状态并查找"background",我们在Button.Enabled或Button中找不到它,但会在UIManager的顶层找到它。因此我们返回该值。
一个特殊说明:传递给此方法的"key"可以是"background"或"Button.background"的形式,其中"Button"等于传递给NimbusStyle构造函数的前缀。在任何情况下,它都会查找"background"。
- 覆盖:
-
get
在类SynthStyle
- 参数:
-
ctx
- 标识请求者的SynthContext -
key
- 不能为空 - 返回:
- 名为属性的值
-
getBackgroundPainter
获取给定SynthContext中指定状态的适当背景Painter(如果有的话)。此方法执行适当的回退搜索,如#get中所述。- 参数:
-
ctx
- SynthContext。不能为空。 - 返回:
- 与给定状态相关联的背景Painter,如果找不到则为null。
-
getForegroundPainter
获取给定SynthContext中指定状态的适当前景Painter(如果有的话)。此方法执行适当的回退搜索,如#get中所述。- 参数:
-
ctx
- SynthContext。不能为空。 - 返回:
- 与给定状态相关联的前景Painter,如果找不到则为null。
-
getBorderPainter
获取给定SynthContext中指定状态的适当边框Painter(如果有的话)。此方法执行适当的回退搜索,如#get中所述。- 参数:
-
ctx
- SynthContext。不能为空。 - 返回:
- 与给定状态相关联的边框Painter,如果找不到则为null。
-