支持定义正在呈现的HTML视图的视觉特性。
StyleSheet用于将HTML模型转换为视觉特征。
这使得视图可以通过外观来定制,同一模型上的多个视图可以以不同方式呈现,等等。这可以被认为是CSS规则库。
CSS属性的关键是CSS.Attribute类型的对象。
值的类型取决于StyleSheet实现,但需要toString方法返回CSS值的字符串表示形式。
HTML View实现获取其属性的主要入口点是getViewAttributes方法。 应该实现这一点以建立用于将属性与视图相关联的所需策略。 每个HTMLEditorKit(即因此每个关联的JEditorPane)都可以拥有自己的StyleSheet,但默认情况下,所有HTMLEditorKit实例都将共享一个工作表。 HTMLDocument实例也可以有一个StyleSheet,它包含特定于文档的CSS规范。
为了使视图存储更少的状态,因此更轻量级,StyleSheet可以作为处理某些渲染任务的画家的工厂。 这允许实现确定他们想要缓存的内容,并且可能在选择器对多个视图通用的级别上进行共享。 由于StyleSheet可能被多个文档的视图使用,并且HTML属性通常不影响正在使用的选择器,因此共享的可能性很大。
规则存储为命名样式,并存储其他信息以快速将元素的上下文转换为规则。 以下代码片段将显示命名样式,因此包含CSS规则。
import java.util.*; import javax.swing.text.*; import javax.swing.text.html.*; public class ShowStyles { public static void main(String[] args) { HTMLEditorKit kit = new HTMLEditorKit(); HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument(); StyleSheet styles = doc.getStyleSheet(); Enumeration rules = styles.getStyleNames(); while (rules.hasMoreElements()) { String name = (String) rules.nextElement(); Style rule = styles.getStyle(name); System.out.println(rule.toString()); } System.exit(0); } }
CSS样式应该覆盖由元素定义的可视属性的语义没有很好地定义。 例如,html
使得正文具有红色背景。 但是如果html文件也包含CSS规则body { background: blue } ,那么身体背景应该是什么颜色就不那么清楚了。 当前实现为元素中定义的可视属性提供了最高优先级,即在任何样式之前始终检查它们。 因此,在前面的示例中,背景将具有红色,因为body元素将背景颜色定义为红色。如前所述,这支持CSS。 我们不支持完整的CSS规范。 请参阅CSS类的javadoc以查看我们支持的属性。 我们目前不支持的两个主要的CSS解析相关概念是伪选择器,例如A:link { color: red }和important修饰符。