文档类之间的区别

3
我一直在阅读javadocs,试图理解swing文档API,但由于有太多的类,如:Document、StyledDocument、AbstractDocument、DefaultStyledDocument、PlainDocument、HTMLDocument以及有人提到的DocumentFilter,我无法从中得出有意义的东西。这个问题更多是基于一般性的,因此,有人能否概述不同实现之间的差异以及不同接口和抽象的用途?
对于我的特定情况,我想要实现一个数据结构,它将:
- 仅包含三行文本。 - 属性不能按行或文档设置。我将在某些其他结构中有几千个这样的结构,因此 - 开销很重要。
是否有任何可以用于此目的的内容,还是最好扩展一些内容?如果是这样,那应该扩展什么?
2个回答

6
你列出的所有文档类都具有相同的基本功能,并且每个类都根据需要扩展功能以填补空白。实际上,只需要意识到需要做什么并使用相应的文档类型即可。例如,如果我正在编辑一个HTML文件,则会使用HTMLDocument类。
我在下面简要描述了您在问题中请求的每个Document类。 Document 文档接口代表整个HTML或XML文档。在概念上,它是文档树的根,提供对文档数据的主要访问。
这是所有其他文档类型将继承的接口。它为所有其他文档类型提供了合约。 AbstractDocument 这个类实现了文档的锁定机制,允许多个读取器或一个写入器,并且在开始对文档进行另一次变异之前,写入器必须等待文档的所有观察者被通知先前的更改。
该类允许您使用不同类型的文档,并使用非常松散的规则集。 由于它非常通用,因此实现起来更加困难。 StyledDocument 是提供所有样式文档的合同的另一个接口。 DefaultStyledDocument 实现了此接口,因此我们将在下面介绍它。 DefaultStyledDocument 一个可以使用字符和段落样式进行标记的文档,类似于Rich Text Format。该文档的元素结构代表样式运行的交叉点。这些样式运行被映射到段落元素结构中,该元素结构可能位于其他结构中。由于逻辑样式分配给了段落边界,因此样式运行在段落边界处中断。
DefaultStyledDocument允许您在文档中放置特殊字符以帮助格式化等操作...当您考虑DefaultStyledDocument时,请想到Microsoft Word。 DocumentFilter 包含DocumentFilter的文档被修改(通过插入或删除)时,它将相应的方法调用转发给DocumentFilter。
这是一个非常有用的类,它会“监听”针对您的文档发生的事件(即修改),并在每个事件发生时执行动作。

PlainDocument

实现AbstractDocument接口,不包含任何格式特殊字符(类似记事本而非Word)。当你只想存储文本(日志文件等)时,应使用此文档。

HTMLDocument

模拟HTML的文档。此模型的目的是支持浏览和编辑。

创建/修改包含HTML代码且旨在在浏览器中查看的文档时应使用HTMLDocument。


1

你的需求不够清晰(至少对我来说是这样)。关键在于你想要如何显示文档。

JTextField 适用于单行文本,因此被排除在外。

JTextArea 适用于多行文本,但不支持特定属性。因此,你只能使用单一字体和单一颜色。

JTextPane 支持多行文本,并支持不同类型的属性,如粗体、斜体等。

随着你需要的功能越来越多,文档会变得更加复杂。

如果这些数据是可编辑的,那么你需要构建支持将每个文档限制为3行文本的功能。再次强调,你对“一行”的定义不够清晰。它可以是1k长,或者最多40个字符,以便在屏幕上作为单行显示而不换行。

我猜你需要的是 JTextArea,我相信它使用的是 PlainDocument。


好的,我能理解为什么它不够简洁。那个三行的部分只是表达了将会有多少文本的一种糟糕的方式。至于是否会有一个硬性限制,我还没有决定。至于PlainDocument,它似乎没有字符级别的属性,所以不能用它。 - gwohpq9

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接