java.lang.Object
javax.swing.text.DocumentFilter
DocumentFilter
,顾名思义,是对Document
变异方法的过滤器。当包含DocumentFilter
的Document
被修改(通过insert
或remove
),它会将适当的方法调用转发给DocumentFilter
。默认实现允许修改发生。子类可以通过有条件地调用超类上的方法或调用传入的FilterBypass
上的必要方法来过滤修改。子类不应该回调到Document进行修改,而是应该调用超类或FilterBypass
。
当在DocumentFilter
上调用remove
或insertString
时,DocumentFilter
可能会多次回调到FilterBypass
,或者针对不同区域,但在从remove
或insertString
方法返回后不应再回调到FilterBypass
。
默认情况下,文本相关的文档变异方法,如insertString
、replace
和remove
在AbstractDocument
中使用DocumentFilter
(如果可用),而元素相关的变异方法,如create
、insert
和removeElement
在DefaultStyledDocument
中不使用DocumentFilter
。如果某个方法不遵循这些默认值,则必须在方法文档中明确说明。
- 自 JDK 版本:
- 1.4
- 参见:
-
Nested Class Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
insertString
(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet attr) 在将文本插入指定文档之前调用。void
remove
(DocumentFilter.FilterBypass fb, int offset, int length) 在指定文档中指定区域移除之前调用。void
replace
(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) 在指定文档中替换文本区域之前调用。
-
Constructor Details
-
DocumentFilter
public DocumentFilter()构造一个DocumentFilter
。
-
-
Method Details
-
remove
public void remove(DocumentFilter.FilterBypass fb, int offset, int length) throws BadLocationException 在指定文档中指定区域移除之前调用。希望有条件允许移除的子类应该重写此方法,并根据需要仅调用超类的实现,或根据需要直接调用FilterBypass
。- 参数:
-
fb
- 可用于变异文档的FilterBypass -
offset
- 从开头开始的偏移量 >= 0 -
length
- 要移除的字符数 >= 0 - 抛出:
-
BadLocationException
- 移除范围的某些部分不是文档的有效部分。异常中的位置是遇到的第一个错误位置。
-
insertString
public void insertString(DocumentFilter.FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException 在将文本插入指定文档之前调用。希望有条件允许插入的子类应该重写此方法,并根据需要仅调用超类的实现,或直接调用FilterBypass。- 参数:
-
fb
- 可用于变异文档的FilterBypass -
offset
- 要插入内容的文档中的偏移量 >= 0。所有在给定位置之后或之后跟踪更改的位置都将移动。 -
string
- 要插入的字符串 -
attr
- 与插入内容关联的属性。如果没有属性,则可能为null。 - 抛出:
-
BadLocationException
- 给定的插入位置不是文档中的有效位置
-
replace
public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException 在指定文档中替换文本区域之前调用。希望有条件允许替换的子类应该重写此方法,并根据需要仅调用超类的实现,或直接调用FilterBypass。- 参数:
-
fb
- 可用于变异文档的FilterBypass -
offset
- 文档中的位置 -
length
- 要删除的文本长度 -
text
- 要插入的文本,null表示没有要插入的文本 -
attrs
- 指示插入文本属性的AttributeSet,null是合法的。 - 抛出:
-
BadLocationException
- 给定的插入位置不是文档中的有效位置
-