Module java.desktop
Package javax.swing.plaf.synth
package javax.swing.plaf.synth
Synth是一种可皮肤化的外观,其中所有绘制都是委托的。Synth不提供默认外观。为了使用Synth,您需要指定一个文件,或者提供一个
SynthStyleFactory
。这两种配置选项都需要理解下面描述的synth架构,以及对Swing架构的理解。
除非另有说明,否则在synth包中定义的所有方法中,null都不是合法值,如果传入null将导致NullPointerException
。
Synth
Synth中的每个ComponentUI
实现都与一个SynthStyle
关联,每个Region
大多数Components
只有一个Region
,因此只有一个SynthStyle
。 SynthStyle
用于访问所有与样式相关的属性:字体、颜色和其他Component
属性。此外,SynthStyle
还用于获取用于绘制背景、边框、焦点和Component
的其他部分的SynthPainter
。 ComponentUI
从SynthStyleFactory
获取SynthStyle
。可以通过直接提供SynthStyleFactory
(通过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
)的Region
组成。每个JComponent
的每个Region
都将有一个SynthStyle
。这允许您自定义每个JComponent
的每个区域的各个部分。
许多Synth方法都接受一个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的渲染器使用的颜色是通过列表和表格区域指定的。以下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"/>
-
ClassDescription一种可以从样式中获取的颜色的类型安全枚举。Swing组件的一个独特的渲染区域。为
JButton
提供了Synth L&F UI代理。为JCheckBoxMenuItem
提供了Synth L&F UI代理。为JCheckBox
提供了Synth L&F UI代理。为JColorChooser
提供了Synth L&F UI代理。为JComboBox
提供了Synth L&F UI代理。Synth使用的常量。包含有关Region
的上下文信息的不可变瞬态对象。为桌面上的最小化内部框架提供了Synth L&F UI代理。为JDesktopPane
提供了Synth L&F UI代理。为JEditorPane
提供了Synth L&F UI代理。为JFormattedTextField
提供了Synth L&F UI代理。用于原始图形调用的包装器。传递了SynthContext
的图标。为JInternalFrame
提供了Synth L&F UI代理。为JLabel
提供了Synth L&F UI代理。为JList
提供了Synth L&F UI代理。SynthLookAndFeel提供了创建自定义外观的基础。为JMenuBar
提供了Synth L&F UI代理。为JMenuItem
提供了Synth L&F UI代理。为JMenu
提供了Synth L&F UI代理。为JOptionPane
提供了Synth L&F UI代理。SynthPainter
用于绘制JComponent
的部分。为JPanel
提供了Synth L&F UI代理。为JPasswordField
提供了Synth L&F UI代理。为JPopupMenu
提供了Synth L&F UI代理。为JProgressBar
提供了Synth L&F UI代理。为JRadioButtonMenuItem
提供了Synth L&F UI代理。为JRadioButton
提供了Synth L&F UI代理。为JRootPane
提供了 Synth L&F UI 代理。为JScrollBar
提供了 Synth L&F UI 代理。为JScrollPane
提供了 Synth L&F UI 代理。为JSeparator
提供了 Synth L&F UI 代理。为JSlider
提供了 Synth L&F UI 代理。为JSpinner
提供了 Synth L&F UI 代理。为JSplitPane
提供了 Synth L&F UI 代理。SynthStyle
是一组样式属性。用于获取SynthStyle
的工厂。为JTabbedPane
提供了 Synth L&F UI 代理。为JTableHeader
提供了 Synth L&F UI 代理。为JTable
提供了 Synth L&F UI 代理。在 Synth 外观中为纯文本编辑器提供外观。为JTextField
提供了 Synth L&F UI 代理。在 Synth 外观中为样式文本编辑器提供外观。为JToggleButton
提供了 Synth L&F UI 代理。为JToolBar
提供了 Synth L&F UI 代理。为JToolTip
提供了 Synth L&F UI 代理。为JTree
提供了 Synth L&F UI 代理。SynthUI 用于为特定组件获取 SynthContext。为JViewport
提供了 Synth L&F UI 代理。