- java.lang.Object
-
- javax.swing.JFormattedTextField.AbstractFormatter
-
- javax.swing.text.DefaultFormatter
-
- javax.swing.text.MaskFormatter
-
- All Implemented Interfaces:
-
Serializable
,Cloneable
public class MaskFormatter extends DefaultFormatter
MaskFormatter
用于格式化和编辑字符串。MaskFormatter
的行为通过String mask来控制,该掩码指定了可以包含在Document
模型中的特定位置的有效字符。 可以指定以下字符: Valid characters and their descriptions Character Description # 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
orCharacter.isDigit
) ? Any character (Character.isLetter
). * Anything. H Any hex character (0-9, a-f or A-F).通常字符对应于一个字符,但在某些语言中并不是这样。 面具是以每个字符为基础的,因此将调整为适合所需的许多字符。
您可以进一步限制
setInvalidCharacters
和setValidCharacters
方法可以输入的字符。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)
),则在编辑时将根据需要跳过字面字符。 考虑一个MaskFormatter
的掩码“### - ####”和当前值“555-1212”。 使用右箭头键浏览该字段将导致(|表示插入符的位置):|555-1212 5|55-1212 55|5-1212 555-|1212 555-1|212
' - '是一个字面(不可编辑)字符,并被跳过。编辑时会产生类似的行为。 考虑将字符串'123-45'和'12345'插入上一个示例中的
MaskFormatter
。 两个插入将导致相同的字符串'123-45__'。 当MaskFormatter
正在处理字符位置3(' - ')的插入时,可能会发生两件事情:- 如果插入的字符为“ - ”,则被接受。
- 如果插入的字符匹配下一个非字面字符的掩码,则在新位置被接受。
- 其他任何事情都会导致编辑无效
默认情况下,
MaskFormatter
不允许无效编辑,您可以使用setAllowsInvalid
方法更改此setAllowsInvalid
,并将对编辑进行有效编辑(使用setCommitsOnValidEdit
更改此内容)。默认情况下,
MaskFormatter
处于覆盖模式。 就是说,键入的字符不会插入一个新的字符,而是当前位置的字符被替换为新键入的字符。 您可以通过方法setOverwriteMode
更改此行为。警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4开始,对所有JavaBeans的长期存储的支持已被添加到
java.beans
包中。 请参阅XMLEncoder
。- 从以下版本开始:
- 1.4
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 MaskFormatter()
创建一个没有掩码的MaskFormatter。MaskFormatter(String mask)
用指定的掩码创建一个MaskFormatter
。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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)
解析文本,返回字符串value
的相应对象表示value
。String
valueToString(Object value)
基于掩码返回对象value
的字符串表示形式。-
Methods inherited from class javax.swing.text.DefaultFormatter
clone, getAllowsInvalid, getCommitsOnValidEdit, getDocumentFilter, getNavigationFilter, getOverwriteMode, getValueClass, setAllowsInvalid, setCommitsOnValidEdit, setOverwriteMode, setValueClass
-
Methods inherited from class javax.swing.JFormattedTextField.AbstractFormatter
getActions, getFormattedTextField, invalidEdit, setEditValid, uninstall
-
-
-
-
构造方法详细信息
-
MaskFormatter
public MaskFormatter()
创建一个没有掩码的MaskFormatter。
-
MaskFormatter
public MaskFormatter(String mask) throws ParseException
使用指定的掩码创建一个MaskFormatter
。 一个ParseException
是否会抛出mask
是无效的面具。- 参数
-
mask
- 面具 - 异常
-
ParseException
- 如果掩码不包含有效的掩码字符
-
-
方法详细信息
-
setMask
public void setMask(String mask) throws ParseException
设置掩码规定合法字符。 如果mask
无效,将会抛出ParseException
。- 参数
-
mask
- 面具 - 异常
-
ParseException
- 如果掩码不包含有效的掩码字符
-
getMask
public String getMask()
返回格式化掩码。- 结果
- 掩饰法定字符值。
-
setValidCharacters
public void setValidCharacters(String validCharacters)
允许进一步限制可以输入的字符。 只允许输入掩码中指定的字符,不在invalidCharacters
和validCharacters
。 传入null(默认值)意味着有效字符只受掩码和无效字符的约束。- 参数
-
validCharacters
- 如果非空,则指定合法字符。
-
getValidCharacters
public String getValidCharacters()
返回可以输入的有效字符。- 结果
- 法定字符
-
setInvalidCharacters
public void setInvalidCharacters(String invalidCharacters)
允许进一步限制可以输入的字符。 只允许在掩码中指定的字符不在invalidCharacters
和validCharacters
。 传入null(默认值)意味着有效字符只受掩码和有效字符的约束。- 参数
-
invalidCharacters
- 如果非空,则指定非法字符。
-
getInvalidCharacters
public String getInvalidCharacters()
返回对输入无效的字符。- 结果
- 非法字符
-
setPlaceholder
public void setPlaceholder(String placeholder)
如果值未完全填写掩码,则设置要使用的字符串。 null值意味着应该使用占位符char。- 参数
-
placeholder
- 如果值未完全填写掩码,则在格式化时使用的字符串
-
getPlaceholder
public String getPlaceholder()
如果值未完全填写掩码,则返回要使用的字符串。- 结果
- 格式化时使用的字符串,如果该值未完全填满该掩码
-
setPlaceholderCharacter
public void setPlaceholderCharacter(char placeholder)
设置要使用的字符代替值中不存在的字符,即用户必须填写它们。默认值为空格。仅当尚未指定占位符字符串或者未完全填写掩码时,才适用。
- 参数
-
placeholder
- 如果值未完全填写掩码,格式化时使用的字符
-
getPlaceholderCharacter
public char getPlaceholderCharacter()
返回要用于代替值中不存在的字符的字符,即用户必须填写它们。- 结果
- 格式化时使用的字符,如果该值未完全填满该掩码
-
setValueContainsLiteralCharacters
public void setValueContainsLiteralCharacters(boolean containsLiteralChars)
如果为true,则返回的值和设置值也将包含掩码中的文字字符。例如,如果掩码为
'(###) ###-####'
,当前值为'(415) 555-1212'
,而valueContainsLiteralCharacters
为真stringToValue
将返回'(415) 555-1212'
。 另一方面,如果valueContainsLiteralCharacters
为假,则stringToValue
将返回'4155551212'
。- 参数
-
containsLiteralChars
- 用于指示是否应在stringToValue中返回掩码中的字符字符
-
getValueContainsLiteralCharacters
public boolean getValueContainsLiteralCharacters()
如果stringToValue
应该返回掩码中的文字字符,则返回true。- 结果
- 如果掩码中的文字字符应该返回到stringToValue,则为真
-
stringToValue
public Object stringToValue(String value) throws ParseException
解析文本,返回字符串value
的适当对象表示value
。 这将根据需要剥离字面字符,并调用stringToValue
,以便如果您指定了一个值类(setValueClass
),将创建一个实例。 如果该值与当前掩码不匹配,则会抛出ParseException
。 有关如何处理文字的详细信息,请参阅setValueContainsLiteralCharacters(boolean)
。- 重写:
-
stringToValue
在DefaultFormatter
- 参数
-
value
- 要转换的字符串 - 结果
- 文本的对象表示
- 异常
-
ParseException
- 转换中是否有错误 - 另请参见:
-
setValueContainsLiteralCharacters(boolean)
-
valueToString
public String valueToString(Object value) throws ParseException
基于掩码返回对象value
的字符串表示形式。 有关如何处理文字的详细信息,请参阅setValueContainsLiteralCharacters(boolean)
。- 重写:
-
valueToString
在DefaultFormatter
- 参数
-
value
- 要转换的值 - 结果
- 值的字符串表示
- 异常
-
ParseException
- 如果转换中有错误 - 另请参见:
-
setValueContainsLiteralCharacters(boolean)
-
install
public void install(JFormattedTextField ftf)
将DefaultFormatter
安装到特定的JFormattedTextField
。 这将调用valueToString
将当前值从JFormattedTextField
转换为字符串。 这样将从Action
安装getActions
,从DocumentFilter
返回的getDocumentFilter
和NavigationFilter
从getNavigationFilter
返回到JFormattedTextField
。子类通常只需要覆盖这个,如果他们希望在
JFormattedTextField
上安装其他监听JFormattedTextField
。如果将当前值转换为字符串有
ParseException
,则将文本设置为空字符串,并将JFormattedTextField
标记为无效状态。虽然这是一种公共方法,但这通常仅适用于
JFormattedTextField
子类。JFormattedTextField
将在值更改或其内部状态更改的适当时候调用此方法。- 重写:
-
install
在DefaultFormatter
- 参数
-
ftf
- JFormattedTextField格式化,可能为null表示从当前JFormattedTextField卸载。
-
-