javax.swing.text

接口
异常
java.lang.Object
  继承者 javax.swing.text.AbstractDocument
所有已实现的接口:
Serializable, Document
直接已知子类:
DefaultStyledDocument, PlainDocument

public abstract class AbstractDocument
     
extends Object
implements Document, Serializable

文档接口的实现,可作为实现各种文档的基础。在此级别上几乎没有策略,所以相应地增加了使用难度。

此类实现了文档的锁定机制。它允许多个 reader 或一个 writer,并且在 writer 开始对文档的另一次改变前,必须等到将以前的更改已通知该文档的所有观察者。使用 render 方法获取和释放读取锁定。通过改变文档的那些方法来获取写入锁定,并且在该方法调用期间保持锁定。在生成改变的线程上完成通知,并且在通知期间该线程对文件具有完全的读取访问权限,不过在通知结束前其他 reader 无法读取。该通知是一个 bean 事件通知,只有通知所有侦听器之后才允许进一步的改变。

所有根据此类创建子类且与文本组件(该组件具有派生自 BasicTextUI 的外观实现)一起使用的模型都可安全地进行异步更新,因为如果该文档的类型是 AbstractDocument,则对 View 层次结构的所有访问都是由 BasicTextUI 序列化的。锁定机制假定独立的线程仅从 DocumentListener 方法访问 View 层次结构,并且同一时间只有一个事件线程处于活动状态。

如果需要并发支持,则有下列额外的含义。所有 DocumentListener 实现和所有 UndoListener 实现的代码路径必须是线程安全的,并且如果要避免死锁,则不能访问组件锁定。在 JComponent 上执行 repaintrevalidate 方法是安全的。

AbstractDocument 在文档的结尾模拟了一个隐含的分隔。除了其他作用,这一功能允许您在最后一个字符的后面定位插入符。因此,getLength 返回一个比 Content 的长度小的值。如果创建自己的 Content,一定要有一个额外的字符并且初始化它。有关此内容的示例,请参见 StringContent 和 GapContent。另一个含义是模拟该隐含结束字符的 Element 具有 endOffset == (getLength() + 1)。例如,在 DefaultStyledDocument 中,getParagraphElement(getLength()).getEndOffset() == getLength() + 1

警告:此类的已序列化对象与以后的 Swing 版本不兼容。当前的序列化支持适用于短期存储或运行相同 Swing 版本的应用程序之间的 RMI。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder


嵌套类摘要
 class AbstractDocument.AbstractElement
          实现元素的抽象部分。
static interface AbstractDocument.AttributeContext
          一个接口,它用于允许 MutableAttributeSet 的实现使用可插入属性压缩技术。
 class AbstractDocument.BranchElement
          实现一个包含其他元素的复合元素。
static interface AbstractDocument.Content
          描述可编辑的字符序列内容的接口。
 class AbstractDocument.DefaultDocumentEvent
          存储修改文档时发生的文档更改。
static class AbstractDocument.ElementEdit
          一个 ElementChange 实现,可将其添加到文档事件中。
 class AbstractDocument.LeafElement
          实现可直接表示某类内容的元素。
 
字段摘要
protected static String BAD_LOCATION
          指示位置错误的错误消息。
static String BidiElementName
          用于保存单向操作的元素名。
static String ContentElementName
          用于表示内容的元素名
static String ElementNameAttribute
          用于指定元素名的属性名。
protected  EventListenerList listenerList
          文档的事件侦听器列表。
static String ParagraphElementName
          用于表示段落的元素名
static String SectionElementName
          用于保存各节(行/段落)的元素名。
 
从接口 javax.swing.text.Document 继承的字段
StreamDescriptionProperty, TitleProperty
 
构造方法摘要
protected AbstractDocument(AbstractDocument.Content data)
          构造具有某种指定内容存储机制的新 AbstractDocument
protected AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context)
          构造具有某种指定内容存储机制的新 AbstractDocument
 
方法摘要
 void addDocumentListener(DocumentListener listener)
          添加负责通知任何更改的文档侦听器。
 void addUndoableEditListener(UndoableEditListener listener)
          添加负责通知任何更改的撤消侦听器。
protected  Element createBranchElement(Element parent, AttributeSet a)
          创建文档分支元素,它可包含其他元素。
protected  Element createLeafElement(Element parent, AttributeSet a, int p0, int p1)
          创建文档叶元素。
 Position createPosition(int offs)
          返回更改文档时,将跟踪更改的位置。
 void dump(PrintStream out)
          提供诊断转储 (dump)。
protected  void fireChangedUpdate(DocumentEvent e)
          通知已注册对获得此事件类型通知感兴趣的所有侦听器。
protected  void fireInsertUpdate(DocumentEvent e)
          通知已注册对获得此事件类型通知感兴趣的所有侦听器。
protected  void fireRemoveUpdate(DocumentEvent e)
          通知已注册对获得此事件类型通知感兴趣的所有侦听器。
protected  void fireUndoableEditUpdate(UndoableEditEvent e)
          通知已注册对获得此事件类型通知感兴趣的所有侦听器。
 int getAsynchronousLoadPriority()
          获得异步加载优先级。
protected  AbstractDocument.AttributeContext getAttributeContext()
          获取管理属性的上下文。
 Element getBidiRootElement()
          返回此文档双向结构的根元素。
protected  AbstractDocument.Content getContent()
          获得文档的内容。
protected  Thread getCurrentWriter()
          获取当前的写入线程(如果有的话)。
abstract  Element getDefaultRootElement()
          返回视图赖依存在的根元素,除非提供了向元素结构指派视图的其他机制。
 DocumentFilter getDocumentFilter()
          返回负责进行插入/移除过滤的 DocumentFilter
 DocumentListener[] getDocumentListeners()
          返回在此文档上注册的所有文档侦听器的数组。
 Dictionary<Object,Object> getDocumentProperties()
          支持管理属性集。
 Position getEndPosition()
          返回表示文档结尾的位置。
 int getLength()
          返回数据的长度。
<T extends EventListener>
T[]
getListeners(Class<T> listenerType)
          返回目前已在此文档上注册为 FooListener 的所有对象组成的数组。
abstract  Element getParagraphElement(int pos)
          获得包含给定位置的段落元素。
 Object getProperty(Object key)
          查找属性值的便捷方法。
 Element[] getRootElements()
          获得已定义的所有根元素。
 Position getStartPosition()
          返回表示文档开始的位置。
 String getText(int offset, int length)
          从文档中获得文本序列。
 void getText(int offset, int length, Segment txt)
          获取文档给定部分内包含的文本。
 UndoableEditListener[] getUndoableEditListeners()
          返回在此文档上注册的所有可撤消编辑侦听器的数组。
 void insertString(int offs, String str, AttributeSet a)
          将某些内容插入文档。
protected  void insertUpdate(AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr)
          在文本插入后更新文档结构。
protected  void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
          随文本的移除更新任何文档结构。
 void putProperty(Object key, Object value)
          存储属性值的便捷方法。
 void readLock()
          获取一个锁定,以开始读取文档的某个状态。
 void readUnlock()
          执行读取解除锁定。
 void remove(int offs, int len)
          从文档中移除某些内容。
 void removeDocumentListener(DocumentListener listener)
          移除文档侦听器。
 void removeUndoableEditListener(UndoableEditListener listener)
          移除撤消侦听器。
protected  void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
          随文本的移除更新任何文档结构。
 void render(Runnable r)
          如果模型支持被异步更新,则此方法允许在并发情况下安全地呈现该模型。
 void replace(int offset, int length, String text, AttributeSet attrs)
          删除从 offsetoffset + length 的文本区域,并用 text 替换它。
 void setAsynchronousLoadPriority(int p)
          设置异步加载优先级。
 void setDocumentFilter(DocumentFilter filter)
          设置 DocumentFilter
 void setDocumentProperties(Dictionary<Object,Object> x)
          替换此文档的文档属性字典。
protected  void writeLock()
          获取一个锁定,以开始改变此锁定保护的文档。
protected  void writeUnlock()
          释放以前通过 writeLock 所获得的写入锁定。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

listenerList

protected EventListenerList listenerList
文档的事件侦听器列表。


BAD_LOCATION

protected static final String BAD_LOCATION
指示位置错误的错误消息。

另请参见:
常量字段值

ParagraphElementName

public static final String ParagraphElementName
用于表示段落的元素名

另请参见:
常量字段值

ContentElementName

public static final String ContentElementName
用于表示内容的元素名

另请参见:
常量字段值

SectionElementName

public static final String SectionElementName
用于保存各节(行/段落)的元素名。

另请参见:
常量字段值

BidiElementName

public static final String BidiElementName
用于保存单向操作的元素名。

另请参见:
常量字段值

ElementNameAttribute

public static final String ElementNameAttribute
用于指定元素名的属性名。

另请参见:
常量字段值
构造方法详细信息

AbstractDocument

protected AbstractDocument(AbstractDocument.Content data)
构造具有某种指定内容存储机制的新 AbstractDocument

参数:
data - 内容

AbstractDocument

protected AbstractDocument(AbstractDocument.Content data,
                           AbstractDocument.AttributeContext context)
构造具有某种指定内容存储机制的新 AbstractDocument

参数:
data - 内容
context - 属性上下文
方法详细信息

getDocumentProperties

public Dictionary<Object,Object> getDocumentProperties()
支持管理属性集。调用者可以使用 documentProperties 字典通过文档范围内起作用的属性注释文档。

返回:
nullDictionary
另请参见:
setDocumentProperties(java.util.Dictionary )

setDocumentProperties

public void setDocumentProperties(Dictionary<Object,Object> x)
替换此文档的文档属性字典。

参数:
x - 新字典
另请参见:
getDocumentProperties()

fireInsertUpdate

protected void fireInsertUpdate(DocumentEvent e)
通知已注册对获得此事件类型通知感兴趣的所有侦听器。使用传入此触发方法的参数延后 (lazily) 创建事件实例。

参数:
e - 事件
另请参见:
EventListenerList

fireChangedUpdate

protected void fireChangedUpdate(DocumentEvent e)
通知已注册对获得此事件类型通知感兴趣的所有侦听器。使用传入此触发方法的参数延后创建事件实例。

参数:
e - 事件
另请参见:
EventListenerList

fireRemoveUpdate

protected void fireRemoveUpdate(DocumentEvent e)
通知已注册对获得此事件类型通知感兴趣的所有侦听器。使用传入此触发方法的参数延后创建事件实例。

参数:
e - 事件
另请参见:
EventListenerList

fireUndoableEditUpdate

protected void fireUndoableEditUpdate(UndoableEditEvent e)
通知已注册对获得此事件类型通知感兴趣的所有侦听器。使用传入此触发方法的参数延后创建事件实例。

参数:
e - 事件
另请参见:
EventListenerList

getListeners

public <T extends EventListener> T[] getListeners(Class<T> listenerType)
返回目前已在此文档上注册为 FooListener 的所有对象组成的数组。 FooListener 是用 addFooListener 方法注册的。

可以使用 class 字面值来指定 listenerType 参数,如 FooListener.class。例如,可以使用以下代码查询文档 d,以获得该文档的侦听器:

DocumentListener[] mls = (DocumentListener[])(d.getListeners(DocumentListener.class));
如果不存在这样的侦听器,则此方法将返回一个空数组。

参数:
listenerType - 所请求的侦听器类型;此参数应该指定一个从 java.util.EventListener 继承的接口
返回:
返回一个在此组件上作为 FooListener 注册的所有对象的数组,如果尚未添加这样的侦听器,则返回一个空数组
抛出:
ClassCastException - 如果 listenerType 未指定一个实现 java.util.EventListener 的类或接口
从以下版本开始:
1.3
另请参见:
getDocumentListeners(), getUndoableEditListeners()

getAsynchronousLoadPriority

public int getAsynchronousLoadPriority()
获得异步加载优先级。如果小于零,则不应异步加载该文档。

返回:
异步加载优先级,如果不应异步加载该文档,则返回 -1

setAsynchronousLoadPriority

public void setAsynchronousLoadPriority(int p)
设置异步加载优先级。

参数:
p - 新异步加载优先级;小于零的值指示不应异步加载该文档

setDocumentFilter

public void setDocumentFilter(DocumentFilter filter)
设置 DocumentFilterDocumentFilter 被传递到 insertremove,以便有条件地允许文本的插入/删除。 null 值指示不进行过滤。

参数:
filter - 用于限制文本的 DocumentFilter
从以下版本开始:
1.4
另请参见:
getDocumentFilter()

getDocumentFilter

public DocumentFilter getDocumentFilter()
返回负责进行插入/移除过滤的 DocumentFilternull 返回值意味着不进行过滤。

返回:
the DocumentFilter
从以下版本开始:
1.4
另请参见:
setDocumentFilter(javax.swing.text.DocumentFilter)

render

public void render(Runnable r)
如果模型支持被异步更新,则此方法允许在并发情况下安全地呈现该模型。给定的 runnable 的执行方式是,在 runnable 执行时安全读取模型且不作任何更改。该 runnable 本身可能 进行任何改变。

实现此方法以便为 runnable 执行期间获取一个读取锁定。在同一时间,可能有多个 runnable 在执行,并且当存在活动呈现的 runnable 时将会阻塞所有 writer。如果该 runnable 抛出异常,则将安全地释放其锁定。对于从不退出的 runnable 没有保护,在其生命周期中会有效地保持文档的锁定。

如果给定的 runnable 试图在此实现中对文档进行任何改变,则会发生死锁。没有为每个呈现线程进行跟踪以便允许检测此种情况的机制,但是子类可以通过额外的开销对呈现线程进行跟踪,并在死锁时抛出错误。

虽然大多数 Swing 方法不是线程安全的,但此方法是线程安全的。有关更多信息,请参阅 How to Use Threads

指定者:
接口 Document 中的 render
参数:
r - 要执行的渲染器

getLength

public int getLength()
返回数据的长度。这是表示用户数据的内容字符数。

指定者:
接口 Document 中的 getLength
返回:
长度,该值 >= 0
另请参见:
Document.getLength()

addDocumentListener

public void addDocumentListener(DocumentListener listener)
添加负责通知任何更改的文档侦听器。

指定者:
接口 Document 中的 addDocumentListener
参数:
listener - 要添加的 DocumentListener
另请参见:
Document.addDocumentListener(javax.swing.event.DocumentListener)

removeDocumentListener

public void removeDocumentListener(DocumentListener listener)
移除文档侦听器。

指定者:
接口 Document 中的 removeDocumentListener
参数:
listener - 要移除的 DocumentListener
另请参见:
Document.removeDocumentListener(javax.swing.event.DocumentListener)

getDocumentListeners

public DocumentListener[] getDocumentListeners()
返回在此文档上注册的所有文档侦听器的数组。

返回:
此文档的所有 DocumentListener,如果当前没有注册的文档侦听器,则返回一个空数组
从以下版本开始:
1.4
另请参见:
addDocumentListener(javax.swing.event.DocumentListener), removeDocumentListener(javax.swing.event.DocumentListener)

addUndoableEditListener

public void addUndoableEditListener