public class MaskFormatter extends DefaultFormatter
MaskFormatter
用于格式化和编辑字符串。
MaskFormatter
的行为是通过String mask来控制的,该掩码指定了可以包含在Document
模型中特定位置的有效字符。
可以指定以下字符:
Character 描述
# Any valid number, usesCharacter.isDigit
. ' Escape character, used to escape any of the special formatting characters. U Any character (Character.isLetter
). All lowercase letters are mapped to upper case. L Any character (Character.isLetter
). All upper case letters are mapped to lower case. A Any character or number (Character.isLetter
or Character.isDigit
) ? Any character (Character.isLetter
). * Anything. H Any hex character (0-9, a-f or A-F).
通常字符对应于一个字符,但在某些语言中并不是这样。 面具是以每个字符为基础的,因此将调整为适合所需的许多字符。
您可以进一步限制setInvalidCharacters
和setValidCharacters
方法可以输入的setInvalidCharacters
。 setInvalidCharacters
允许您指定哪些字符不合法。 setValidCharacters
允许您指定哪些字符有效。 例如,以下代码块相当于没有无效/有效字符的'0xHHH'掩码。
MaskFormatter formatter = new MaskFormatter("0x***");
formatter.setValidCharacters("0123456789abcdefABCDEF");
当最初格式化一个值,如果字符串的长度小于掩码的长度,可以发生两件事情。 将使用占位符字符串,否则将使用占位符字符。 优先级被赋予占位符字符串。 例如:
MaskFormatter formatter = new MaskFormatter("###-####");
formatter.setPlaceholderCharacter('_');
formatter.getDisplayValue(tf, "123");
会导致字符串'123 -____'。 如果setPlaceholder("555-1212")
被调用'123-1212'将导致。 占位符字符串仅用于初始格式,后续格式仅使用占位符字符。
如果MaskFormatter
配置为仅允许有效字符( setAllowsInvalid(false)
),则编辑时将根据需要跳过字面字符。 考虑一个带有“### - ####”和当前值“555-1212”的MaskFormatter
。 使用右箭头键浏览该字段将导致(|表示插入符的位置):
|555-1212
5|55-1212
55|5-1212
555-|1212
555-1|212
' - '是一个字面(不可编辑)字符,并被跳过。
编辑时会产生类似的行为。 考虑将字符串'123-45'和'12345'插入上一个示例中的MaskFormatter
。 两个插入将导致相同的字符串'123-45__'。 当MaskFormatter
正在处理字符位置3(' - ')的插入时,可能会发生两件事情:
默认情况下, MaskFormatter
不允许无效编辑,您可以使用setAllowsInvalid
方法更改此内容,并将对有效的编辑进行编辑(使用setCommitsOnValidEdit
更改此内容)。
默认情况下, MaskFormatter
处于覆盖模式。 就是说,键入的字符不会插入一个新的字符,而是当前位置的字符被替换为新键入的字符。 您可以通过方法setOverwriteMode
更改此行为。
警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,支持所有JavaBeans的长期存储已被添加到java.beans
包中。 请参阅XMLEncoder
。
Constructor and Description |
---|
MaskFormatter()
创建一个没有掩码的MaskFormatter。
|
MaskFormatter(String mask)
用指定的掩码创建一个
MaskFormatter 。
|
Modifier and Type | Method and Description |
---|---|
String |
getInvalidCharacters()
返回对输入无效的字符。
|
String |
getMask()
返回格式化掩码。
|
String |
getPlaceholder()
如果值未完全填写掩码,则返回要使用的字符串。
|
char |
getPlaceholderCharacter()
返回要用于代替值中不存在的字符的字符,即用户必须填写它们。
|
String |
getValidCharacters()
返回可以输入的有效字符。
|
boolean |
getValueContainsLiteralCharacters()
如果
stringToValue 应该返回掩码中的文字字符,则返回true。
|
void |
install(JFormattedTextField ftf)
将
DefaultFormatter 安装到特定的
JFormattedTextField 。
|
void |
setInvalidCharacters(String invalidCharacters)
允许进一步限制可以输入的字符。
|
void |
setMask(String mask)
设置掩码规定合法字符。
|
void |
setPlaceholder(String placeholder)
如果值未完全填写掩码,则设置要使用的字符串。
|
void |
setPlaceholderCharacter(char placeholder)
设置要使用的字符代替值中不存在的字符,即用户必须填写它们。
|
void |
setValidCharacters(String validCharacters)
允许进一步限制可以输入的字符。
|
void |
setValueContainsLiteralCharacters(boolean containsLiteralChars)
如果为true,则返回的值和设置值也将包含掩码中的文字字符。
|
Object |
stringToValue(String value)
解析文本,返回String
value 的相应对象表示
value 。
|
String |
valueToString(Object value)
根据掩码返回Object
value 的String表示形式。
|
clone, getAllowsInvalid, getCommitsOnValidEdit, getDocumentFilter, getNavigationFilter, getOverwriteMode, getValueClass, setAllowsInvalid, setCommitsOnValidEdit, setOverwriteMode, setValueClass
getActions, getFormattedTextField, invalidEdit, setEditValid, uninstall
public MaskFormatter()
public MaskFormatter(String mask) throws ParseException
MaskFormatter
。
一个ParseException
如果将抛出mask
是无效的面具。
ParseException
- 如果mask不包含有效的掩码字符
public void setMask(String mask) throws ParseException
mask
无效,将会抛出ParseException
。
ParseException
- 如果mask不包含有效的掩码字符
public String getMask()
public void setValidCharacters(String validCharacters)
invalidCharacters
不能在invalidCharacters
和validCharacters
中被允许输入。
传入null(默认)意味着有效的字符只受掩码和无效字符的约束。
validCharacters
- 如果非空,则指定合法字符。
public String getValidCharacters()
public void setInvalidCharacters(String invalidCharacters)
invalidCharacters
不能在invalidCharacters
和validCharacters
中被允许输入。
传入null(默认值)意味着有效字符只受掩码和有效字符的约束。
invalidCharacters
- 如果非空,则指定非法字符。
public String getInvalidCharacters()
public void setPlaceholder(String placeholder)
placeholder
- 如果值未完全填写掩码,则在格式化时使用的字符串
public String getPlaceholder()
public void setPlaceholderCharacter(char placeholder)
仅当尚未指定占位符字符串或者未完全填写掩码时,才适用。
placeholder
- 格式化时使用的字符,如果该值未完全填满该掩码
public char getPlaceholderCharacter()
public void setValueContainsLiteralCharacters(boolean containsLiteralChars)
例如,如果掩码为'(###) ###-####'
,则当前值为'(415) 555-1212'
,而valueContainsLiteralCharacters
为真stringToValue
将返回'(415) 555-1212'
。 另一方面,如果valueContainsLiteralCharacters
是假的, stringToValue
将返回'4155551212'
。
containsLiteralChars
- 用于指示是否应在stringToValue中返回掩码中的字符字符
public boolean getValueContainsLiteralCharacters()
stringToValue
应该返回掩码中的文字字符,则返回true。
public Object stringToValue(String value) throws ParseException
value
的相应对象表示value
。
这将根据需要剥离文字字符,并调用超级stringToValue
,以便如果您指定了一个值类( setValueClass
),则会创建一个实例。
如果该值与当前掩码不匹配,则会抛出ParseException
。
有关如何处理文字的详细信息,请参阅setValueContainsLiteralCharacters(boolean)
。
stringToValue
在
DefaultFormatter
value
- 要转换的字符串
ParseException
- 转换中是否有错误
setValueContainsLiteralCharacters(boolean)
public String valueToString(Object value) throws ParseException
value
的String表示形式。
有关如何处理文字的详细信息,请参阅setValueContainsLiteralCharacters(boolean)
。
valueToString
中的
DefaultFormatter
value
- 要转换的价值
ParseException
- 转换中是否有错误
setValueContainsLiteralCharacters(boolean)
public void install(JFormattedTextField ftf)
DefaultFormatter
安装到特定的JFormattedTextField
。
这将调用valueToString
将当前值从JFormattedTextField
转换为字符串。
那么这将安装Action
从s getActions
,该DocumentFilter
从返回getDocumentFilter
和NavigationFilter
从返回getNavigationFilter
到JFormattedTextField
。
子类通常只需要覆盖这个,如果他们希望在JFormattedTextField上安装其他监听JFormattedTextField
。
如果有一个ParseException
将当前值转换为字符串,则将文本设置为空字符串,并将JFormattedTextField
标记为无效状态。
虽然这是一种公共方法,但这通常仅适用于JFormattedTextField的JFormattedTextField
。 JFormattedTextField
将在值更改或其内部状态更改的适当时候调用此方法。
install
在
DefaultFormatter
ftf
- JFormattedTextField格式化,可能为null表示从当前JFormattedTextField卸载。