模块 java.desktop

类 StyleSheet

java.lang.Object
javax.swing.text.StyleContext
javax.swing.text.html.StyleSheet
所有已实现的接口:
Serializable , AbstractDocument.AttributeContext

public class StyleSheet extends StyleContext
支持定义正在呈现的 HTML 视图的视觉特征。 StyleSheet 用于将 HTML 模型转换为视觉特征。这使得可以通过外观自定义视图,可以不同地呈现同一模型的多个视图等。这可以被认为是 CSS 规则存储库。 CSS 属性的键是 CSS.Attribute 类型的对象。值的类型取决于 StyleSheet 实现,但需要 toString 方法返回 CSS 值的字符串表示形式。

HTML 视图实现获取其属性的主要入口点是 getViewAttributes 方法。这应该被实现以建立用于将属性与视图相关联的所需策略。每个 HTMLEditorKit(即每个关联的 JEditorPane)都可以有自己的 StyleSheet,但默认情况下,所有 HTMLEditorKit 实例将共享一个表单。 HTMLDocument 实例也可以有一个 StyleSheet,它包含特定于文档的 CSS 规范。

为了让视图存储更少的状态并因此更轻量级,样式表可以充当绘制器的工厂来处理一些渲染任务。这允许实现确定他们想要缓存的内容,并可能在选择器对多个视图通用的级别进行共享。由于 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 <body bgcolor=red> 使正文具有红色背景。但是,如果 html 文件还包含 CSS 规则 body { background: blue },那么主体的背景颜色应该是什么颜色就不太清楚了。当前的实现赋予元素中定义的视觉属性最高的优先级,即它们总是在任何样式之前被检查。因此,在前面的示例中,背景颜色为红色,因为 body 元素将背景颜色定义为红色。

正如已经提到的,它支持 CSS。我们不支持完整的 CSS 规范。请参阅 CSS 类的 javadoc 以查看我们支持的属性。我们目前不支持的两个主要的 CSS 解析相关概念是伪选择器,例如 A:link { color: red }important 修饰符。

实现注意事项:
此实现目前尚未完成。它可以替换为完整的替代实现。此类的未来版本将提供更好的 CSS 支持。
  • 构造方法详细信息

    • StyleSheet

      public StyleSheet()
      构建样式表
  • 方法详情

    • getRule

      public Style  getRule(HTML.Tag  t, Element  e)
      获取用于呈现给定类型的 HTML 标记的样式。给定的元素表示标签,可用于确定如果嵌套在元素内属性将不同的情况的嵌套。
      参数:
      t - 转换为视觉属性的类型
      e - 代表标签的元素;该元素可用于确定如果嵌套在其他元素内属性将不同的情况的嵌套
      返回:
      用于呈现标签的 CSS 属性集
    • getRule

      public Style  getRule(String  selector)
      获取与以字符串形式给定的选择器最匹配的规则。其中 selector 是元素名称的空格分隔字符串。例如,selector 可能是“html body tr td”

      返回的 Style 的属性将随着规则的添加和删除而改变。也就是说,如果您请求一个带有选择器“表 p”的规则,并且添加了一个带有“p”选择器的新规则,则返回的样式将包括来自规则“p”的新属性。

      参数:
      selector - 元素名称的空格分隔字符串。
      返回:
      最匹配选择器的规则。
    • addRule

      public void addRule(String  rule)
      向工作表添加一组规则。规则应采用有效的 CSS 格式。通常这将作为解析 <style> 标签的结果被调用。
      参数:
      rule - 一套规则
    • getDeclaration

      public AttributeSet  getDeclaration(String  decl)
      将 CSS 声明转换为表示 CSS 声明的 AttributeSet。通常这会在遇到 HTML 样式属性时被调用。
      参数:
      decl - CSS 声明
      返回:
      表示 CSS 声明的一组属性。
    • loadRules

      public void loadRules(Reader  in, URL  ref) throws IOException
      加载一组根据 CSS1 语法指定的规则。如果与现有规则发生冲突,则新指定的规则将获胜。
      参数:
      in - 从中读取 CSS 语法的流
      ref - 参考网址。该值表示流的位置,可能为空。流中指定的所有相对 URL 都将基于此参数。
      抛出:
      IOException - 如果发生 I/O 错误。
    • getViewAttributes

      public AttributeSet  getViewAttributes(View  v)
      获取一组属性以在视图中用于显示。这基本上是一组可用于 View.getAttributes 的属性。
      参数:
      v - 一个视图
      返回:
      属性的
    • removeStyle

      public void removeStyle(String  nm)
      删除以前添加到文档中的命名样式。
      重写:
      removeStyle 在类 StyleContext
      参数:
      nm - 要删除的样式的名称
    • addStyleSheet

      public void addStyleSheet(StyleSheet  ss)
      将样式表 ss 中的规则添加到接收者的规则中。 ss's 规则将覆盖任何以前添加的样式表的规则。添加的样式表永远不会覆盖接收样式表的规则。
      参数:
      ss - 样式表
      自从:
      1.3
    • removeStyleSheet

      public void removeStyleSheet(StyleSheet  ss)
      从接收器的样式表中删除样式表 ss
      参数:
      ss - 样式表
      自从:
      1.3
    • getStyleSheets

      public StyleSheet [] getStyleSheets()
      返回链接样式表的数组。如果没有链接的样式表,将返回 null。
      返回:
      一组样式表。
      自从:
      1.3
    • importStyleSheet

      public void importStyleSheet(URL  url)
      url 导入样式表。生成的规则直接添加到接收方。如果您不希望规则成为接收器的一部分,请创建一个新的 StyleSheet 并使用 addStyleSheet 将其链接进来。
      参数:
      url - 一个网址
      自从:
      1.3
    • setBase

      public void setBase(URL  base)
      设置基础。所有相对的 import 语句都将相对于 base
      参数:
      base - 一个基地。
      自从:
      1.3
    • getBase

      public URL  getBase()
      返回基地。
      返回:
      基地。
      自从:
      1.3
    • addCSSAttribute

      public void addCSSAttribute(MutableAttributeSet  attr, CSS.Attribute  key, String  value)
      将 CSS 属性添加到给定的集合。
      参数:
      attr - 一组属性
      key - 一个 CSS 属性
      value - 一个 HTML 属性值
      自从:
      1.3
    • addCSSAttributeFromHTML

      public boolean addCSSAttributeFromHTML(MutableAttributeSet  attr, CSS.Attribute  key, String  value)
      将 CSS 属性添加到给定的集合。
      参数:
      attr - 一组属性
      key - 一个 CSS 属性
      value - 一个 HTML 属性值
      返回:
      true 如果 HTML 属性 value 可以转换为 CSS 属性,否则为 false。
      自从:
      1.3
    • translateHTMLToCSS

      public AttributeSet  translateHTMLToCSS(AttributeSet  htmlAttrSet)
      将一组 HTML 属性转换为等效的一组 CSS 属性。
      参数:
      htmlAttrSet - 包含 HTML 属性的 AttributeSet。
      返回:
      CSS 属性集。
    • addAttribute

      public AttributeSet  addAttribute(AttributeSet  old, Object  key, Object  value)
      向给定集合添加一个属性,并返回新的代表集合。这被重新实现以在转发到超类行为之前将 StyleConstant 属性转换为 CSS。 StyleConstants 属性没有相应的 CSS 条目,StyleConstants 属性已存储(但可能未使用)。
      指定者:
      addAttribute 在接口 AbstractDocument.AttributeContext
      重写:
      addAttribute 在类 StyleContext
      参数:
      old - 旧属性集
      key - 非空属性键
      value - 属性值
      返回:
      更新后的属性集
      参见:
    • addAttributes

      public AttributeSet  addAttributes(AttributeSet  old, AttributeSet  attr)
      向元素添加一组属性。如果这些属性中的任何一个是 StyleConstants 属性,它们将在转发到超类行为之前转换为 CSS。
      指定者:
      addAttributes 在接口 AbstractDocument.AttributeContext
      重写:
      addAttributes 在类 StyleContext
      参数:
      old - 旧属性集
      attr - 要添加的属性
      返回:
      更新后的属性集
      参见:
    • removeAttribute

      public AttributeSet  removeAttribute(AttributeSet  old, Object  key)
      从集合中移除一个属性。如果该属性是 StyleConstants 属性,请求将在转发到超类行为之前转换为 CSS 属性。
      指定者:
      removeAttribute 在接口 AbstractDocument.AttributeContext
      重写:
      removeAttribute 在类 StyleContext
      参数:
      old - 旧的属性集
      key - 非空属性名称
      返回:
      更新后的属性集
      参见:
    • removeAttributes

      public AttributeSet  removeAttributes(AttributeSet  old, Enumeration <?> names)
      删除元素的一组属性。如果任何属性是 StyleConstants 属性,请求将在转发到超类行为之前转换为 CSS 属性。
      指定者:
      removeAttributes 在接口 AbstractDocument.AttributeContext
      重写:
      removeAttributes 在类 StyleContext
      参数:
      old - 旧属性集
      names - 属性名称
      返回:
      更新后的属性集
      参见:
    • removeAttributes

      public AttributeSet  removeAttributes(AttributeSet  old, AttributeSet  attrs)
      删除一组属性。如果任何属性是 StyleConstants 属性,请求将在转发到超类行为之前转换为 CSS 属性。
      指定者:
      removeAttributes 在接口 AbstractDocument.AttributeContext
      重写:
      removeAttributes 在类 StyleContext
      参数:
      old - 旧属性集
      attrs - 属性
      返回:
      更新后的属性集
      参见:
    • createSmallAttributeSet

      protected StyleContext.SmallAttributeSet  createSmallAttributeSet(AttributeSet  a)
      创建一组可以共享的紧凑属性。这是想要改变 SmallAttributeSet 行为的子类的钩子。这可以重新实现以返回提供某种属性转换的 AttributeSet。
      重写:
      createSmallAttributeSet 在类 StyleContext
      参数:
      a - 以紧凑形式表示的属性集。
      返回:
      可能共享的一组紧凑的属性
    • createLargeAttributeSet

      protected MutableAttributeSet  createLargeAttributeSet(AttributeSet  a)
      创建大量属性,这些属性应该以空间换取时间。此集不会共享。这是一个挂钩,用于希望更改较大属性存储格式(默认情况下为 SimpleAttributeSet)的行为的子类。这可以重新实现以返回提供某种属性转换的 MutableAttributeSet。
      重写:
      createLargeAttributeSet 在类 StyleContext
      参数:
      a - 以较大形式表示的属性集。
      返回:
      应该以空间换取时间的大量属性
    • getFont

      public Font  getFont(AttributeSet  a)
      获取用于给定属性集的字体。
      重写:
      getFont 在类 StyleContext
      参数:
      a - 属性集
      返回:
      字体
    • getForeground

      public Color  getForeground(AttributeSet  a)
      获取一组属性并将其转换为前景颜色规范。这可能用于指定更亮、更多色调等内容。
      重写:
      getForeground 在类 StyleContext
      参数:
      a - 属性集
      返回:
      颜色
    • getBackground

      public Color  getBackground(AttributeSet  a)
      获取一组属性并将其转换为背景颜色规范。这可能用于指定更亮、更多色调等内容。
      重写:
      getBackground 在类 StyleContext
      参数:
      a - 属性集
      返回:
      颜色
    • getBoxPainter

      public StyleSheet.BoxPainter  getBoxPainter(AttributeSet  a)
      获取框格式化程序以用于给定的 CSS 属性集。
      参数:
      a - 一组 CSS 属性
      返回:
      盒子格式化程序。
    • getListPainter

      public StyleSheet.ListPainter  getListPainter(AttributeSet  a)
      获取列表格式化程序以用于给定的 CSS 属性集。
      参数:
      a - 一组 CSS 属性
      返回:
      列表格式化程序。
    • setBaseFontSize

      public void setBaseFontSize(int sz)
      设置基本字体大小,有效值介于 1 和 7 之间。
      参数:
      sz - 字体大小。
    • setBaseFontSize

      public void setBaseFontSize(String  size)
      根据传入的字符串设置基本字体大小。该字符串可以标识特定字体大小(合法值介于 1 和 7 之间),也可以标识相对字体大小,例如 +1 或 -2。
      参数:
      size - 字体大小。
    • getIndexOfSize

      public static int getIndexOfSize(float pt)
      返回 HTML/CSS 大小模型的索引。
      参数:
      pt - 点的大小
      返回:
      HTML/CSS 大小模型的索引。
    • getPointSize

      public float getPointSize(int index)
      给定大小索引,返回磅值。
      参数:
      index - 大小索引
      返回:
      点大小值。
    • getPointSize

      public float getPointSize(String  size)
      给定一个字符串,例如“+2”、“-2”或“2”,返回一个磅值。
      参数:
      size - 描述字体大小的 CSS 字符串
      返回:
      点大小值。
    • stringToColor

      public Color  stringToColor(String  string)
      将颜色字符串(例如“RED”或“#NNNNNN”)转换为颜色。注意:这只会转换 HTML3.2 颜色字符串或长度为 7 的字符串;否则,它将返回 null。
      参数:
      string - 颜色字符串,例如“RED”或“#NNNNNN”
      返回:
      颜色