javax.swing.plaf.synth

接口
Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。

请参见:
          描述

接口摘要
SynthConstants 由 Synth 使用的常量。
 

类摘要
ColorType 可从某种风格中获取的一些颜色的类型安全枚举。
Region Swing 组件的独特呈现区域。
SynthContext 一个不可变的瞬态对象,它包含有关 Region 的上下文信息。
SynthGraphicsUtils 用于基本图形调用的包装器。
SynthLookAndFeel SynthLookAndFeel 提供创建定制外观的基础。
SynthPainter SynthPainter 用于绘制 JComponent 的某些部分。
SynthStyle SynthStyle 是一个样式属性集。
SynthStyleFactory 用于获得 SynthStyle 的工厂。
 

软件包 javax.swing.plaf.synth 的描述

Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。Synth 不提供默认外观。为了使用 Synth,需要指定一个 file,或提供一个 SynthStyleFactory。两种配置选项都要求了解 synth 的架构(该架构如下所示),并了解 Swing 的架构。

除非另行指定,否则 null 对于 synth 包中定义的所有方法而言都不是合法值,如果传入 null,将导致 NullPointerException

Synth

Synth 中的每个 ComponentUI 实现都将自身与每个 Region 的一个 SynthStyle 相关联,大多数 Component 只能有一个 Region,所以也就只有一个 SynthStyleSynthStyle 用于访问所有与样式有关的属性:fonts、colors 和其他 Component 属性。此外,SynthStyle 用于获得绘制背景、边框、焦点和 Component 的其他部分的 SynthPainterComponentUISynthStyleFactory 中获得 SynthStyle。可直接通过 SynthLookAndFeel.setStyleFactory(javax.swing.plaf.synth.SynthStyleFactory) 或间接通过 SynthLookAndFeel.load(java.io.InputStream, java.lang.Class ) 提供 SynthStyleFactory。以下示例使用 SynthLookAndFeel.load() 方法来配置 SynthLookAndFeel,并将它设置为当前外观:

  SynthLookAndFeel laf = new SynthLookAndFeel();
  laf.load(MyClass.class.getResourceAsStream("laf.xml"), MyClass.class);
  UIManager.setLookAndFeel(laf);
      

许多 JComponent 被拆分成更小的块,并由 Region 中类型安全的枚举来标识。例如,JTabbedPaneJTabbedPaneRegion (Region.TABBED_PANE)、内容区域 (Region.TABBED_PANE_CONTENT)、选项卡背后的区域 (Region.TABBED_PANE_TAB_AREA) 和选项卡 (Region.TABBED_PANE_TAB) 组成。每个 JComponent 的每个 Region 都将有一个 SynthStyle。这允许您定制每个 JComponent 的每个区域的个别片段。

许多 Synth 方法都采用一个 SynthContext。SynthContext 用于提供有关当前 Component 的信息,这些信息包括:与当前 Region 关联的 SynthStyle、位掩码形式的 Component 状态(有关有效状态,请参阅 SynthConstants)和一个标识正被绘制的 Component 部分的 Region

由非 JTextComponent 呈现的所有文本都被委托给 SynthGraphicsUtils,可以使用 SynthStyle 的方法 SynthStyle.getGraphicsUtils(javax.swing.plaf.synth.SynthContext) 获取。通过提供自己的 SynthGraphicsUtils,可以定制文本呈现。

特定组件注意事项

JTree

Synth 为树单元提供一个区域:Region.TREE_CELL。要指定渲染器的颜色,可以为 TREE_CELL 区域提供一个风格。以下代码展示了这一点:

  <style id="treeCellStyle">
    <opaque value="TRUE"/>
    <state>
      <color value="WHITE" type="TEXT_FOREGROUND"/>
      <color value="RED" type="TEXT_BACKGROUND"/>
    </state>
    <state value="SELECTED">
      <color value="RED" type="TEXT_FOREGROUND"/>
      <color value="WHITE" type="BACKGROUND"/>
    </state>
  </style>
  <bind style="treeCellStyle" type="region" key="TreeCell"/>

这指定了一个颜色组合,当选中时,红色将在白色之上;未选中时,白色在红色之上。要查看背景,需要指定标签是透明的,用以下 XML 代码段可以做到这一点:

  <style id="labelStyle">
    <opaque value="FALSE"/>
  </style>
  <bind style="labelStyle" type="region" key="Label"/>

JList 和 JTable

JList 和 JTable 渲染器所使用的颜色通过列表和表 Region 的方式指定。以下 XML 代码段展示了如何在选中时指定红色在白色之上,未选中时白色在红色之上:

  <style id="style">
    <opaque value="TRUE"/>
    <state>
      <color value="WHITE" type="TEXT_FOREGROUND"/>
      <color value="RED" type="TEXT_BACKGROUND"/>
      <color value="RED" type="BACKGROUND"/>
    </state>
    <state value="SELECTED">
      <color value="RED" type="TEXT_FOREGROUND"/>
      <color value="WHITE" type="TEXT_BACKGROUND"/>
    </state>
  </style>
  <bind style="style" type="region" key="Table"/>
  <bind style="style" type="region" key="List"/>