JFormattedTextField

 

   JFormattedTextField在JTextField基础上增加了formatter和一个value对象。formatter可以将value转换成显示的文本,或把文本转换成value。

   1、创建和初始化

   rateField = new JFormattedTextField(percentFormat);
   rateField.setValue(new Double(rate));
   rateField.setColumns(10);
   rateField.addPropertyChangeListener("value", this);
   numPeriodsField = new JFormattedTextField();
   numPeriodsField.setValue(new Integer(numPeriods));
   numPeriodsField.setColumns(10);
   numPeriodsField.addPropertyChangeListener("value", this);
   paymentField = new JFormattedTextField(paymentFormat);
   paymentField.setValue(new Double(payment));
   paymentField.setColumns(10);
   aymentField.setEditable(false);
   paymentField.setForeground(Color.red);
   ...
   percentFormat = NumberFormat.getNumberInstance();
   percentFormat.setMinimumFractionDigits(2);
   paymentFormat = NumberFormat.getCurrencyInstance();

   以上的构造器中的使用的参数是java.text.Format,formatter使用该对象进行value和text间的转换。numPeriodsField使用一个无参的构造器,因为默认formatter会处理Integer型对象的格式化工作,但不使用于浮点型的对象。

   2、设置和获得value

   注意:FormattedText的value和text是两种不同的属性,而且value继text后产生。text就是文本框中实时显示的内容,所以value不一定会立刻反映最新的text值,而且在text的变化提交前,value值不会变化。

   设置value值有两种方法:setValue或commitEdit。

   commitEdit方法在两种情况下会被自动调用:

   (1)用户在文本框中回车;

   (2)文本框失去焦点。可以通过调用setFocusLostBehavior设置不同的结果。

    当调用setValue方法后,value值会变成指定值,同时text会随之变化;不主张调用setText方法,因为通过该方法,text将会变化,但这个变化不会反应到value,导致text和value得不一致。

   3、定制format

   可以通过调用工厂类DateFormat或NumberFormat相关方法获得Format对象,或者通过实例化SimpleDateFormat获得。Formatters使用这些format对象完成value和text的转变,这些formatter一般都是InternationalFormatter的子类(除MaskFormatter外),如DateFormatter、NumberFormatter。

   4、使用MaskFormatter

   该formatter能严格明确文本框的某个位置哪些字符有效。

   zipField = new JFormattedTextField(
                    createFormatter("#####"));
...
protected MaskFormatter createFormatter(String s) {
    MaskFormatter formatter = null;
    try {
        formatter = new MaskFormatter(s);
    } catch (java.text.ParseException exc) {
        System.err.println("formatter is bad: " + exc.getMessage());
        System.exit(-1);
    }
    return formatter;
}

Character Description
#Any valid number (Character.isDigit ).
'
(single quote)
Escape character, used to escape any of the special formatting characters.
UAny character (Character.isLetter ). All lowercase letters are mapped to uppercase.
LAny character (Character.isLetter ). All uppercase letters are mapped to lowercase.
AAny character or number (Character.isLetter or Character.isDigit ).
?Any character (Character.isLetter ).
*Anything.
HAny hex character (0-9, a-f or A-F).

    5、定制formatter和使用formatter工厂

    使用formatter时牢记formater最好和JFormattedTextField一一关联。可以通过以下方式设置JFormattedTextField使用的formatter:

    (1)使用JFormattedTextField带Format参数的构造函数;

    (2)使用JFormattedTextField带JFormattedTextField.AbstractFormatter参数的构造函数;

    (3)对一个尚且没有设置format、formatter、formatterFactory的JFormattedTextField调用setValue方法,然后根据value的类型由默认的format factory给该文本框分配一个合适的formatter。

    (4)为JFormattedTextField设置formatter factory,可以通过构造器或setFormatterFactory,由该factory返回相应的formatter,这种方式最灵活。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值