如鹏网 大学生计算机学习社区

CowNew开源团队

http://www.cownew.com 邮件请联系 about521 at 163.com

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  363 随笔 :: 2 文章 :: 808 评论 :: 0 Trackbacks

 

首先演示一个NumberFormatter的例子,在这个例子中要求用户输入一个数字,单击按钮后将用户输入的数字乘2以后重新赋值给输入框。用户输入的数字必须大于0,小于100。

package com.cownew.Char19;

import java.awt.Font;

import java.awt.Rectangle;

import java.math.BigDecimal;

import javax.swing.JButton;

import javax.swing.JDialog;

import javax.swing.JFormattedTextField;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.text.NumberFormatter;

import javax.swing.JTextField;

public class NumberFormaterDialog1 extends JDialog

{

private JPanel jContentPane = null;

private JFormattedTextField numTxtField = null;

private JButton jButton = null;

private JTextField jTextField = null;

private JFormattedTextField getNumTxtField()

{

if (numTxtField == null)

{

NumberFormatter numFormater = new NumberFormatter();

numFormater.setMaximum(new BigDecimal(100));

numFormater.setMinimum(new BigDecimal(0));

numTxtField = new JFormattedTextField(numFormater);

numTxtField.setBounds(new Rectangle(56, 38, 154, 24));

}

return numTxtField;

}

private JButton getJButton()

{

if (jButton == null)

{

jButton = new JButton();

jButton.setBounds(new Rectangle(78, 80, 81, 36));

jButton.setFont(new Font("Dialog", Font.PLAIN, 18));

jButton.setText("计算");

jButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent e)

{

BigDecimal oldValue = (BigDecimal) getNumTxtField()

.getValue();

if (oldValue != null)

{

getNumTxtField().setValue(

oldValue.multiply(new BigDecimal(2)));

}

else

{

JOptionPane.showMessageDialog(

NumberFormaterDialog1.this,"值非法");

}

}

});

}

return jButton;

}

private JTextField getJTextField()

{

if (jTextField == null)

{

jTextField = new JTextField();

jTextField.setBounds(new Rectangle(176, 83, 76, 22));

}

return jTextField;

}

public static void main(String[] args)

{

NumberFormaterDialog1 dlg = new NumberFormaterDialog1();

dlg.show();

}

public NumberFormaterDialog1()

{

super();

initialize();

}

private void initialize()

{

this.setSize(300, 200);

this.setContentPane(getJContentPane());

this.setTitle("JFrame");

}

private JPanel getJContentPane()

{

if (jContentPane == null)

{

jContentPane = new JPanel();

jContentPane.setLayout(null);

jContentPane.add(getNumTxtField(), null);

jContentPane.add(getJButton(), null);

jContentPane.add(getJTextField(), null);

}

return jContentPane;

}

}

当我们输入-3这个无效值的时候是允许输入的,但是当鼠标焦点移动到另外的控件的时候,“-3”就会消失。这个行为可以通过NumberFormatter 的setAllowsInvalid方法来改变:

图 17.5

图 17.6

如果输入“10”这个合法的数字,单击“计算”按钮即可算出正确的值:

图 17.7

图 17.8

案例系统中的com.cownew.ctk.ui.swing.JNumberTextField就是为了方便使用而从JFormattedTextField派生的一个数字输入控件。

DateFormatter的使用也是类似的,也允许设置最大最小值,实际上只要从InternationalFormatter派生的类,并且数据类型实现了Comparable接口都可以设置极值。

MaskFormatter允许开发人员使用掩码指定更加复杂的校验规则。掩码是一串特殊的字符串,每个字符的含义如下表所示:

字符

说明

#

匹配任何数字字符

'

转义符,用来将格式字符当成普通字符用

U

任意大写字母

L

任意小写字母

A

任意数字或者字母

?

任何字母

*

任何字符

H

任何十六进制字符 (0-9, a-f or A-F).

实例化时指定其掩码即可:

MaskFormatter formatter = new MaskFormatter("0x***");

formatter.setValidCharacters("0123456789abcdefABCDEF");

还允许为掩码设定占位符,这样可用性更好:

MaskFormatter formatter = new MaskFormatter("###-####");

formatter.setPlaceholderCharacter('_');

formatter.getDisplayValue(tf, "123");

posted on 2007-04-26 09:29 CowNew开源团队 阅读(1592) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: