public abstract class AbstractDocument extends Object implements Document, Serializable
这个类实现了文档的锁定机制。它允许多个读者或一个作家,作家必须等待,直到所有的文件的观察员已通知以前的变化,然后开始另一个突变的文件。读锁的获取和释放的render
使用方法。一个写锁的方法获得突变的文档,并进行方法调用的持续时间。通知是在产生了突变的线程上完成的,并且该线程已经在通知的持续时间对文档进行了完整的读访问,但其他的读者在通知完成之前被保存。该通知是一个豆类事件通知,不允许任何进一步的突变,直到所有的听众都被通知。
任何模型继承这个类和用于与文本组件有一个外观和感觉的实现,是来自BasicTextUI的可以安全地更新异步连接,因为视图层次结构的所有访问,被BasicTextUI如果文件类型是AbstractDocument
。锁定假定一个独立的线程只会从所有DocumentListener方法访问视图的层次,那只会有一个事件线程处于活动状态。
如果需要并发支持,则有以下额外的影响。任何所有DocumentListener实现任何undolistener执行代码路径必须是线程安全的,而不是访问组件锁如果想免于死锁。在repaint
和revalidate
JComponent的方法是安全的。
abstractdocument模型在文档的最后一个暗示分手。在其他的事情让你的位置插入的最后一个字符后。因此,getLength
返回一个小于内容的长度。如果您创建您自己的内容,请确保并初始化它有一个额外的字符。指的是这方面的例子stringcontent和gapcontent。另一个含义是元素模型隐含的末字符将有endoffset = =(getlength() + 1)。例如,在defaultstyleddocument getParagraphElement(getLength()).getEndOffset() == getLength() + 1
。
警告:序列化该类的对象与以后的Swing版本不兼容。当前的序列化支持适用于短期贮藏或RMI运行相同Swing版本的应用程序之间。为1.4,为所有JavaBeans™长期存储的支持已被添加到java.beans
包。请看XMLEncoder
。
Modifier and Type | Class and Description |
---|---|
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
实现一个直接表示某种类型内容的元素。
|
Modifier and Type | Field and Description |
---|---|
protected static String |
BAD_LOCATION
错误信息以指示错误位置。
|
static String |
BidiElementName
用于保持单向运行的元素的名称
|
static String |
ContentElementName
用于表示内容的元素的名称
|
static String |
ElementNameAttribute
用于指定元素名称的属性的名称。
|
protected EventListenerList |
listenerList
文档的事件侦听器列表。
|
static String |
ParagraphElementName
用于表示段落的元素的名称
|
static String |
SectionElementName
用于保持部分(行/段落)的元素的名称。
|
StreamDescriptionProperty, TitleProperty
Modifier | Constructor and Description |
---|---|
protected |
AbstractDocument(AbstractDocument.Content data)
构建了一种新的
AbstractDocument ,缠在一些指定内容的存储机制。
|
protected |
AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context)
构建了一种新的
AbstractDocument ,缠在一些指定内容的存储机制。
|
Modifier and Type | Method and Description |
---|---|
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)
提供一个诊断转储。
|
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> |
getListeners(类<T> listenerType)
返回对象的当前注册为
FooListener s在本文件的数组。
|
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)
删除文本区域从
offset 到
offset + length ,与
text 取代它。
|
void |
setAsynchronousLoadPriority(int p)
设置异步加载优先级。
|
void |
setDocumentFilter(DocumentFilter filter)
集
DocumentFilter 。
|
void |
setDocumentProperties(Dictionary<Object,Object> x)
替换此文档的文档属性字典。
|
protected void |
writeLock()
获取一个锁开始改变这个文件锁保护。
|
protected void |
writeUnlock()
释放写锁定
writeLock 先前获得通过。
|
protected EventListenerList listenerList
protected static final String BAD_LOCATION
public static final String ParagraphElementName
public static final String ContentElementName
public static final String SectionElementName
public static final String BidiElementName
public static final String ElementNameAttribute
protected AbstractDocument(AbstractDocument.Content data)
AbstractDocument
,缠在一些指定内容的存储机制。
data
-内容
protected AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context)
AbstractDocument
,缠在一些指定内容的存储机制。
data
-内容
context
-属性上下文
public Dictionary<Object,Object> getDocumentProperties()
documentProperties
字典文件范围内的属性标注文档。
null
Dictionary
setDocumentProperties(java.util.Dictionary<java.lang.Object, java.lang.Object>)
public void setDocumentProperties(Dictionary<Object,Object> x)
x
-新词典
getDocumentProperties()
protected void fireInsertUpdate(DocumentEvent e)
e
-事件
EventListenerList
protected void fireChangedUpdate(DocumentEvent e)
e
-事件
EventListenerList
protected void fireRemoveUpdate(DocumentEvent e)
e
-事件
EventListenerList
protected void fireUndoableEditUpdate(UndoableEditEvent e)
e
-事件
EventListenerList
public <T extends EventListener> T[] getListeners(类<T> listenerType)
FooListener
s在本文件的数组。
FooListener
s使用
addFooListener
方法注册。
您可以指定一个类的listenerType
字面的说法,如FooListener.class
。例如,你可以查询一个文件的听众与下面的代码文件d
:
所有DocumentListener [] MLS =(所有DocumentListener [ ])(d.getlisteners(所有DocumentListener。类));如果没有这样的听众的存在,此方法将返回空数组。
listenerType
-听众的类型要求;这个参数应该指定一个接口,从
java.util.EventListener
FooListener
s数组,或一个空数组如果没有这样的听众已添加
ClassCastException
-如果
listenerType
不指定一个类或接口实现
java.util.EventListener
getDocumentListeners()
,
getUndoableEditListeners()
public int getAsynchronousLoadPriority()
-1
如果文件不应该异步加载
public void setAsynchronousLoadPriority(int p)
p
-新的异步加载优先级;值小于零表明该文件不应被异步加载
public void setDocumentFilter(DocumentFilter filter)
DocumentFilter
。的
DocumentFilter
通过
insert
和
remove
有条件地允许插入/删除的文本。一个
null
值表示没有过滤会发生。
filter
-用来限制文本的
DocumentFilter
getDocumentFilter()
public DocumentFilter getDocumentFilter()
DocumentFilter
,负责插入/删除过滤。一个
null
返回值意味着没有过滤发生。
setDocumentFilter(javax.swing.text.DocumentFilter)
public void render(Runnable r)
这是实现runnable对象执行的时间获得读锁。可能会有多个runnable对象在同一时间执行,和所有的作家都会有积极的渲染Runnables受阻。如果运行时抛出异常,它的锁会被安全释放。没有保护一个Runnable,不退出,这将有效地把文件锁定它的一生。
如果给定的运行试图在这实施任何突变,死锁发生。有没有跟踪个别渲染线程,以使检测这种情况,但一个子类可能会产生的开销跟踪他们,并抛出一个错误。
这种方法是线程安全的,虽然大多数摇摆方法不是。更多信息请见Concurrency in Swing。
public int getLength()
getLength
接口
Document
Document.getLength()
public void addDocumentListener(DocumentListener listener)
addDocumentListener
接口
Document
listener
-
DocumentListener
添加
Document.addDocumentListener(javax.swing.event.DocumentListener)
public void removeDocumentListener(DocumentListener listener)
removeDocumentListener
接口
Document
listener
-
DocumentListener
删除
Document.removeDocumentListener(javax.swing.event.DocumentListener)
public DocumentListener[] getDocumentListeners()
DocumentListener
s或空数组如果没有听众正在注册文件
addDocumentListener(javax.swing.event.DocumentListener)
,
removeDocumentListener(javax.swing.event.DocumentListener)
public void addUndoableEditListener(UndoableEditListener listener)
UndoableEdit
会引起相应的documentevent被解雇的直观(S)与模型同步。
addUndoableEditListener
接口
Document
listener
-
UndoableEditListener
添加
Document.addUndoableEditListener(javax.swing.event.UndoableEditListener)
public void removeUndoableEditListener(UndoableEditListener listener)
removeUndoableEditListener
接口
Document
listener
-
UndoableEditListener
删除
Document.removeDocumentListener(javax.swing.event.DocumentListener)
public UndoableEditListener[] getUndoableEditListeners()
UndoableEditListener
s或空数组如果没有撤消编辑听众正在注册
addUndoableEditListener(javax.swing.event.UndoableEditListener)
,
removeUndoableEditListener(javax.swing.event.UndoableEditListener)
public final Object getProperty(Object key)
getdocumentproperties()。得到(关键);
getProperty
接口
Document
key
-非
null
性能的关键
null
getDocumentProperties()
public final void putProperty(Object key, Object value)
getdocumentproperties()。把(键,值);如果
value
是
null
此方法将删除该属性。
putProperty
接口
Document
key
-非
null
关键
value
-属性值
getDocumentProperties()
public void remove(int offs, int len) throws BadLocationException
这种方法是线程安全的,虽然大多数摇摆方法不是。更多信息请见Concurrency in Swing。
remove
接口
Document
offs
-起始偏移> = 0
len
-字符数删除> = 0
BadLocationException
-去除位置不在有效的文档位置
Document.remove(int, int)
public void replace(int offset, int length, String text, AttributeSet attrs) throws BadLocationException
offset
到
offset + length
,与
text
取代它。它是到实现如何实现这一点,一些实现可能会把这作为两个不同的操作:一个删除后面的插入,其他人可能会把替换为一个原子操作。
offset
指数的子元素
length
-文本删除长度,可0表示不删除任何东西
text
文本插入,
null
表示没有文本插入
attrs
- attributeset指示插入的文本属性,
null
是合法的,通常视为一个空attributeset,但确切的解释留给子类
BadLocationException
-给定的位置不在有效的文档位置
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
这种方法是线程安全的,虽然大多数摇摆方法不是。更多信息请见Concurrency in Swing。
insertString
接口
Document
offs
-起始偏移> = 0
str
-插入字符串;空/空字符串没有
a
-插入内容的属性
BadLocationException
-给定的插入位置不在有效的文档位置
Document.insertString(int, java.lang.String, javax.swing.text.AttributeSet)
public String getText(int offset, int length) throws BadLocationException
getText
接口
Document
offset
-起始偏移> = 0
length
-字符数检索> = 0
BadLocationException
-规定的范围包括不在有效的文档位置
Document.getText(int, int)
public void getText(int offset, int length, Segment txt) throws BadLocationException
如果在txt参数partialreturn属性为false,在段返回的数据将是整个长度的要求,可以或不可以复制取决于数据存储。如果partialreturn属性为true,只有文字可以不退还的金额还创建一个副本。使用部分回报将提供更好的性能的情况下,大量的文档被扫描。下面是使用部分返回访问整个文档的一个例子:
int nleft =医生。getdocumentlength(); 段文字=新segment(); int取舍= 0; 文本。setpartialreturn(真的); 而(nleft > 0){ DOC。gettext(取舍,nleft,文本); /文本做某事 nleft = text.count; 取舍+ = text.count; }
getText
接口
Document
offset
-起始偏移> = 0
length
-检索> = 0的字符数
txt
-段对象来检索文本
BadLocationException
-规定的范围包括不在有效的文档位置
public Position createPosition(int offs) throws BadLocationException
这种方法是线程安全的,虽然大多数摇摆方法不是。更多信息请见Concurrency in Swing。
createPosition
接口
Document
offs
在模型> = 0的位置
BadLocationException
-如果给定的位置不在相关文件表示一个有效的位置
Document.createPosition(int)
public final Position getStartPosition()
getStartPosition
接口
Document
public final Position getEndPosition()
getEndPosition
接口
Document
public Element[] getRootElements()
getRootElements
接口
Document
public abstract Element getDefaultRootElement()
getDefaultRootElement
接口
Document
Document.getDefaultRootElement()
public Element getBidiRootElement()
public abstract Element getParagraphElement(int pos)
pos
-起始偏移> = 0
protected final AbstractDocument.AttributeContext getAttributeContext()
protected void insertUpdate(AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr)
chng
-变更的描述
attr
-变化的属性
protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
chng
-变更的描述
protected void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
chng
-变更的描述
public void dump(PrintStream out)
out
-输出流
protected final AbstractDocument.Content getContent()
protected Element createLeafElement(Element parent, AttributeSet a, int p0, int p1)
parent
-父元素
a
-该元素的属性
p0
-范围> = 0的开始
p1
-结束的范围> = P0
protected Element createBranchElement(Element parent, AttributeSet a)
parent
-父元素
a
-属性
protected final Thread getCurrentWriter()
null
如果有没有进步的修改
protected final void writeLock()
writeLock
,只要它不试图从中获得额外的
writeLock
s文件通知。试图从中获得
writeLock
所有DocumentListener通知将导致
IllegalStateException
。获得每个线程的多个
writeLock
能力允许子类获得writelock,执行一些操作,然后释放锁。
电话writeLock
必须调用writeUnlock
平衡,否则Document
就会处于锁定状态,没有阅读或写作可以做。
IllegalStateException
-被非法锁的尝试。如果文件被正确执行,这只能如果文档监听器尝试文档发生变异。这种情况违反了豆的事件模型,订单的交付是没有保证的,所有的听众都应该得到通知之前,进一步的突变是允许的。
protected final void writeUnlock()
writeLock
。后将锁计数,如果没有优秀的锁,这将允许一个新的作家或读者。
writeLock()
public final void readLock()
readUnlock
平衡。
readUnlock()
public final void readUnlock()
readLock();
try {
// do something
} finally {
readUnlock();
}
readLock()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.