Module java.desktop

Class NimbusStyle

java.lang.Object
javax.swing.plaf.synth.SynthStyle
javax.swing.plaf.nimbus.NimbusStyle

public final class NimbusStyle extends SynthStyle

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 Details

  • Method Details

    • installDefaults

      public void installDefaults(SynthContext ctx)
      context上安装来自此样式的必要状态到JComponent。重写以使此样式从UIDefaults中填充数据(如果需要)。
      覆盖:
      installDefaults 在类 SynthStyle
      参数:
      ctx - 标识要安装属性的SynthContext。
    • getInsets

      public Insets getInsets(SynthContext ctx, Insets in)
      返回用于计算尺寸信息的插图。重写以使此样式从UIDefaults中填充数据(如果需要)。
      覆盖:
      getInsets 在类 SynthStyle
      参数:
      ctx - 标识请求者的SynthContext
      in - 用于放置返回值的插图。
      返回:
      尺寸插图。
    • getColorForState

      protected Color getColorForState(SynthContext ctx, ColorType type)
      返回指定状态的颜色。这不应调用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

      protected Font getFontForState(SynthContext ctx)
      返回指定状态的字体。这不应调用JComponent上的任何方法。重写以使此样式从UIDefaults中填充数据(如果需要)。如果在UIDefaults中找不到名为"font"的值,则将返回UIDefaults中的"defaultFont"字体。
      指定者:
      getFontForState 在类 SynthStyle
      参数:
      ctx - 标识请求者的SynthContext
      返回:
      要渲染的字体
    • getPainter

      public SynthPainter getPainter(SynthContext ctx)
      返回将用于绘制的SynthPainter。可能返回null。返回此样式的SynthPainter,最终委托给此样式中安装的绘图器。
      覆盖:
      getPainter 在类 SynthStyle
      参数:
      ctx - 标识请求者的SynthContext
      返回:
      要使用的SynthPainter
    • isOpaque

      public boolean isOpaque(SynthContext ctx)
      如果区域是不透明的,则返回true。重写以使此样式从UIDefaults中填充数据(如果需要)。如果在UI默认值中未指定不透明度,则默认为非不透明。
      覆盖:
      isOpaque 在类 SynthStyle
      参数:
      ctx - 标识请求者的SynthContext
      返回:
      如果区域是不透明的,则为true。
    • get

      public Object get(SynthContext ctx, Object key)
      获取特定区域样式属性的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

      public Painter<Object> getBackgroundPainter(SynthContext ctx)
      获取给定SynthContext中指定状态的适当背景Painter(如果有的话)。此方法执行适当的回退搜索,如#get中所述。
      参数:
      ctx - SynthContext。不能为空。
      返回:
      与给定状态相关联的背景Painter,如果找不到则为null。
    • getForegroundPainter

      public Painter<Object> getForegroundPainter(SynthContext ctx)
      获取给定SynthContext中指定状态的适当前景Painter(如果有的话)。此方法执行适当的回退搜索,如#get中所述。
      参数:
      ctx - SynthContext。不能为空。
      返回:
      与给定状态相关联的前景Painter,如果找不到则为null。
    • getBorderPainter

      public Painter<Object> getBorderPainter(SynthContext ctx)
      获取给定SynthContext中指定状态的适当边框Painter(如果有的话)。此方法执行适当的回退搜索,如#get中所述。
      参数:
      ctx - SynthContext。不能为空。
      返回:
      与给定状态相关联的边框Painter,如果找不到则为null。