java.lang.Object javax.swing.JFormattedTextField.AbstractFormatter javax.swing.text.DefaultFormatter javax.swing.text.MaskFormatter
public class MaskFormatter
MaskFormatter
用于格式化和编辑字符串。MaskFormatter
的行为通过 String 掩码控制,该掩码指定可以包含在 Document
模型中特定位置的有效字符。可以指定以下字符:
字符 | 描述 |
---|---|
# | 任何有效数字,使用 Character.isDigit 。 |
' | 转义字符,用于避开任何具有特殊格式的字符。 |
U | 任何字符 (Character.isLetter )。将所有小写字母映射为大写。 |
L | 任何字符 (Character.isLetter )。将所有大写字母映射为小写。 |
A | 任何字符或数字(Character.isLetter 或 Character.isDigit ) |
? | 任何字符 (Character.isLetter )。 |
* | 所有字符。 |
H | 任何十六进制字符(0-9、a-f 或 A-F)。 |
字符通常对应于一个 char,但在某些语言中不是这样。掩码是以单个字符为基础的,因此可以任意调整 char 数量来满足需要。
可以进一步限制可通过 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
方法更改此设置,并在有效编辑状态提交编辑(使用 setCommitsOnValidEdit
更改此设置)。
默认情况下,MaskFormatter
处于改写模式。也就是说,键入字符时不插入新字符,而是使用新键入的字符替换当前位置的字符。可以通过方法 setOverwriteMode
更改此行为。
警告:此类的已序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储或运行相同 Swing 版本的应用程序之间的 RMI。从 1.4 版本开始,已在 java.beans
包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder
。
构造方法摘要 | |
---|---|
MaskFormatter() 创建一个不带掩码的 MaskFormatter。 |
|
MaskFormatter(String mask) 创建具有指定掩码的 MaskFormatter 。 |
方法摘要 | |
---|---|
String |
getInvalidCharacters() 返回输入无效的字符。 |
String |
getMask() 返回格式化掩码。 |
String |
getPlaceholder() 如果值未完全填充掩码,则返回要使用的 String。 |
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 的适当 Object 表示形式。 |
String |
valueToString(Object value) 返回基于掩码的 Object value 的 String 表示形式。 |
从类 javax.swing.JFormattedTextField.AbstractFormatter 继承的方法 |
---|
getActions, getFormattedTextField, invalidEdit, setEditValid, uninstall |
从类 java.lang.Object 继承的方法 |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public MaskFormatter()
public MaskFormatter(String mask) throws ParseException
MaskFormatter
。如果
mask
不是有效掩码,则抛出
ParseException
。
ParseException
- 如果掩码不包含有效掩码字符
方法详细信息 |
---|
public void setMask(String mask) throws ParseException
mask
无效,这将抛出一个
ParseException
。
ParseException
- 如果掩码不包含有效掩码字符
public String getMask()
public void setValidCharacters(String validCharacters)
invalidCharacters
,而是
validCharacters
)字符。传入 null(默认)意味着有效字符只由掩码和无效字符限定范围。
validCharacters
- 如果为非 null,则指定合法字符。
public String getValidCharacters()
public void setInvalidCharacters(String invalidCharacters)
invalidCharacters
,而是
validCharacters
)字符。传入 null (默认)意味着有效字符只由掩码和有效字符限定范围。
invalidCharacters
- 如果为非 null,则指定非法字符。
public String getInvalidCharacters()
public void setPlaceholder(String placeholder)
placeholder
- 值未完全填充掩码的情况下格式化时使用的字符串
public String getPlaceholder()
public void setPlaceholderCharacter(char placeholder)
此方法仅适用于占位符字符串尚未指定,或未完全填充掩码的情况。
placeholder
- 如果值未完全填充掩码,则为格式化时使用的 Character
public char getPlaceholderCharacter()
public void setValueContainsLiteralCharacters(boolean containsLiteralChars)
例如,如果掩码为 '(###) ###-####'
,当前值为 '(415) 555-1212'
,且 valueContainsLiteralCharacters
为 true,则 stringToValue
将返回 '(415) 555-1212'
。另一方面,如果 valueContainsLiteralCharacters
为 false,则 stringToValue
将返回 '4155551212'
。
containsLiteralChars
- 用于指示掩码中的字面值是否应该在 stringToValue 中返回。
public boolean getValueContainsLiteralCharacters()
stringToValue
应该返回掩码中的字面值,则返回 true。
public Object stringToValue(String value) throws ParseException
value
的适当 Object 表示形式。此方法将在必要时将字面值字符分开并调用超类
stringToValue
,所以,如果已指定了值类 (
setValueClass
),则将创建它的一个实例。如果该值与当前掩码不匹配,这将抛出一个
ParseException
。有关如何处理字面值的详细信息,请参阅
setValueContainsLiteralCharacters(boolean)
。
DefaultFormatter
中的
stringToValue
value
- 要转换的字符串
ParseException
- 如果在转换时发生错误
setValueContainsLiteralCharacters(boolean)
public String valueToString(Object value) throws ParseException
value
的 String 表示形式。有关如何处理字面值的详细信息,请参阅
setValueContainsLiteralCharacters(boolean)
。
DefaultFormatter
中的
valueToString
value
- 要转换的 Value
ParseException
- 如果在转换时发生错误
setValueContainsLiteralCharacters(boolean)
public void install(JFormattedTextField ftf)
DefaultFormatter
安装在特定的
JFormattedTextField
上。这将调用
valueToString
,将
JFormattedTextField
中的当前值转换为 String。此方法稍后将会把
getActions
返回的
Action
、
getDocumentFilter
返回的
DocumentFilter
和
getNavigationFilter
返回的
NavigationFilter
安装到
JFormattedTextField
上。
如果子类希望在 JFormattedTextField
上安装其他侦听器,则通常只需要重写此方法。
如果在将当前值转换为 String 时存在 ParseException
,则这会将文本设置为空 String,并将 JFormattedTextField
标记为正处在无效状态。
尽管这是一个公共方法,但通常仅供 JFormattedTextField
的子类使用。当值发生更改,或内部状态发生更改时,JFormattedTextField
将在适当的时候调用此方法。
DefaultFormatter
中的
install
ftf
- 要格式化为的 JFormattedTextField,可以为 null,这指示从当前的 JFormattedTextField 卸载。