JformattedTextField之MaskFormatter (二)

三JformattedTextField限制定长输入,指定某些特殊输入

我们经常会遇到比如输入IP地址,输入手机号码等定长输入的场景。这儿我们就用到了和DateFormater, NumberFormater并列的MaskFormatter, 注意: 这三种格式是并列的,所以每次只能使用一种。详见代码:

MaskFormatter formatter = new MaskFormatter(“###########”);formatter.setPlaceholderCharacter(‘0’);JFormattedTextField ssnField = new JFormattedTextField(formatter);

setPlaceholderCharacter(’0’)函数的功能是: 设置一个字符,用来替代值中不存在的字符(即用户必须填充它们)。默认值为一个空格。即是在输入字符之前的替代符号。

如果要在前面显示前缀,并且输入的数字必须是1、2、3、4这四个数字,最后两位是从a、b、c中取,网站空间,香港空间,比如0571-41234ac, 则代码则改为:

MaskFormatter formatter = new MaskFormatter(“0571-######**”);formatter.setPlaceholderCharacter(‘0’);formatter.setValidCharacters(“12456abc”);JFormattedTextField ssnField = new JFormattedTextField(formatter);

setValidCharacters函数是指明那些是有效的字符,与其相反的还有setInvalidCharacters函数,指明哪些是不合法字符,除了不合法字符,其他都是合法字符。

在MaskFormatter格式中,有多种替代符,其中#代表数字,*可以是任何字符, 详如下:

字符

描述

#任何有效数字,使用 Character.isDigit。

‘转义字符,用于避开任何具有特殊格式的字符。

U任何字符 (Character.isLetter)。将所有小写字母映射为大写。

L任何字符 (Character.isLetter)。将所有大写字母映射为小写。

A任何字符或数字(Character.isLetter 或 Character.isDigit)

?任何字符 (Character.isLetter)。

*所有字符。

H任何十六进制字符(0-9、a-f 或 A-F)。

四 自定义特殊格式:

引文:

如果已有的NumberFormatter, DateFormatter, MaskFormatter不能满足条件,就要自己写一个Formatter, 继承DefaultFormatter类,香港虚拟主机,然后重写stringToValue方法和valueToString方法,其中valueToString方法是使用 toString 方法将传入的 Object 转换为 String; stringToValue方法是通过使用带 String 参数的构造方法将传入的 String 转换为 getValueClass 的一个实例。如果 getValueClass 返回 null,将使用 JFormattedTextField 中当前值的类,例子见如下代码:

import java.text.ParseException;import java.util.StringTokenizer;import javax.swing.text.DefaultFormatter;class IPAddressFormatter extends DefaultFormatter {public String valueToString(Object value) throws ParseException {if (!(value instanceof byte[]))throw new ParseException(“Not a byte[]”, 0);byte[] a = (byte[]) value;if (a.length != 4)throw new ParseException(“Length != 4”, 0);StringBuilder builder = new StringBuilder();for (int i = 0; i < 4; i++) {int b = a[i];if (b < 0)b += 256;builder.append(String.valueOf(b));if (i < 3)builder.append(‘.’);}return builder.toString();}public Object stringToValue(String text) throws ParseException {StringTokenizer tokenizer = new StringTokenizer(text, “.”);byte[] a = new byte[4];for (int i = 0; i < 4; i++) {int b = 0;if (!tokenizer.hasMoreTokens())throw new ParseException(“Too few bytes”, 0);try {b = Integer.parseInt(tokenizer.nextToken());} catch (NumberFormatException e) {throw new ParseException(“Not an integer”, 0);}if (b < 0 || b >= 256)throw new ParseException(“Byte out of range”, 0);a[i] = (byte) b;}if (tokenizer.hasMoreTokens())throw new ParseException(“Too many bytes”, 0);return a;}}

引文:

旅游,放松心情,用眼睛享受风景。

JformattedTextField之MaskFormatter (二)

相关文章:

你感兴趣的文章:

标签云: