请参见:
描述
接口摘要 | |
---|---|
SynthConstants | 由 Synth 使用的常量。 |
类摘要 | |
---|---|
ColorType | 可从某种风格中获取的一些颜色的类型安全枚举。 |
Region | Swing 组件的独特呈现区域。 |
SynthContext | 一个不可变的瞬态对象,它包含有关 Region 的上下文信息。 |
SynthGraphicsUtils | 用于基本图形调用的包装器。 |
SynthLookAndFeel | SynthLookAndFeel 提供创建定制外观的基础。 |
SynthPainter | SynthPainter 用于绘制 JComponent 的某些部分。 |
SynthStyle | SynthStyle 是一个样式属性集。 |
SynthStyleFactory | 用于获得 SynthStyle 的工厂。 |
Synth 是一个可更换皮肤 (skinnable) 的外观,在其中可委托所有绘制。Synth 不提供默认外观。为了使用 Synth,需要指定一个 file,或提供一个 SynthStyleFactory
。两种配置选项都要求了解 synth 的架构(该架构如下所示),并了解 Swing 的架构。
除非另行指定,否则 null 对于 synth 包中定义的所有方法而言都不是合法值,如果传入 null,将导致 NullPointerException
。
Synth 中的每个 ComponentUI
实现都将自身与每个 Region
的一个 SynthStyle
相关联,大多数 Component
只能有一个 Region
,所以也就只有一个 SynthStyle
。SynthStyle
用于访问所有与样式有关的属性:fonts、colors 和其他 Component
属性。此外,SynthStyle
用于获得绘制背景、边框、焦点和 Component
的其他部分的 SynthPainter
。ComponentUI
从 SynthStyleFactory
中获得 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
中类型安全的枚举来标识。例如,JTabbedPane
由 JTabbedPane
的 Region
(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
,可以定制文本呈现。
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 渲染器所使用的颜色通过列表和表 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"/>