一个模拟HTML的文档。
此模型的目的是支持浏览和编辑。
因此,默认情况下,HTML文档描述的结构不会完全复制。
默认情况下建模的元素结构由类HTMLDocument.HTMLReader构建,该类实现了解析器所期望的HTMLEditorKit.ParserCallback协议。
要更改结构,可以HTMLReader ,并重新实现方法getReader(int)以返回新的读取器实现。
有关创建的默认结构的详细信息,请参阅HTMLReader的文档。
目的是文档是无损的(尽管再现HTML格式可能导致不同的格式)。
该文档仅模拟HTML,并且不会尝试在其中存储视图属性。 元素由StyleContext.NameAttribute属性标识,该属性应始终具有标识元素类型的类型HTML.Tag的值。 一些元素(例如注释)被合成。 HTMLFactory使用此属性来确定要构建的视图类型。
本文档支持增量加载。 TokenThreshold属性控制在尝试更新文档的元素结构之前缓冲了多少解析。 此属性由EditorKit设置,以便子类可以禁用它。
Base属性确定用于解析相对URL的URL。 默认情况下,如果属性的值是URL, Document.StreamDescriptionProperty 。 如果遇到标记,则base将成为该标记指定的URL。 因为基本URL是属性,所以它当然可以直接设置。
此文档的默认内容存储机制是间隙缓冲区( GapContent )。 可以使用实现Content的构造函数来提供替代Content 。
修改HTMLDocument
除了Document和StyledDocument提供的用于改变HTMLDocument的方法之外,HTMLDocument还提供了许多便利方法。 可以使用以下方法将HTML内容插入现有文档。
以下示例说明了使用这些方法。 每个示例都假定HTML文档按以下方式初始化:
JEditorPane p = new JEditorPane();
p.setContentType("text/html");
p.setText("..."); // Document text is provided below.
HTMLDocument d = (HTMLDocument) p.getDocument();
使用以下HTML内容:
An example HTMLDocumentdiv { background-color: silver; }
ul { color: blue; }
Paragraph 1
Paragraph 2
修改HTML文档的所有方法都需要Element 。 它以深度优先顺序返回包含具有给定值的指定属性的第一个后代元素。 例如, d.getElement(d.getDefaultRootElement(), StyleConstants.NameAttribute, HTML.Tag.P)返回第一个段落元素。
返回其ID属性与指定值匹配的元素。 例如, d.getElement("BOX")返回DIV元素。
getIterator(HTML.Tag t)方法还可用于查找文档中所有出现的指定HTML标记。
插入元素
可以使用方法insertAfterStart和insertBeforeEnd在任何非叶元素的现有子元素之前或之后插入元素。 例如,如果e是DIV元素,则d.insertAfterStart(e, "
- List Item
- List Item
可以使用方法insertBeforeStart和insertAfterEnd在任何元素之前或之后插入兄弟元素。 例如,如果e是DIV元件, d.insertBeforeStart(e, "
- List Item
- List Item
替换元素
可以使用方法setInnerHTML和setOuterHTML替换元素及其所有后代。 例如,如果e是DIV元素,则d.setInnerHTML(e, "
- List Item
- List Item
摘要
下表显示了示例文档和上述各种方法的结果。
HTML Content of example above Example insertAfterStart insertBeforeEnd insertBeforeStart insertAfterEnd setInnerHTML setOuterHTML
Paragraph 1
Paragraph 2
List Item
Paragraph 1
Paragraph 2
Paragraph 1
Paragraph 2
List Item
List Item
Paragraph 1
Paragraph 2
Paragraph 1
Paragraph 2
List Item
List Item
List Item
警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始, java.beans软件包中添加了对所有JavaBeans java.beans长期存储的支持。