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 代理。